在具有 Windows 身份验证的 ASP.NET 核心 MVC 应用程序中使用 Active Directory 访问用户详细信息
Accessing user details using Active Directory in an ASP.NET Core MVC app with Windows authentication
我试图通过 Windows 身份验证在我的 ASP.NET 核心 MVC 项目中访问用户的名字、姓氏等用户信息。我实际上是在网上搜索解决方案后让它工作的,但我对这些东西和初级程序员很陌生,所以不理解我只是在我的项目中复制粘贴的部分发生了什么。
我在该网站上也找不到任何解释。如果有人能向我解释这一点,我会很高兴。非常感谢。
此代码的参考网站:https://sensibledev.com/how-to-get-user-details-from-active-directory/
家庭控制器:
var username = User.Identity.Name;
using (var context = new PrincipalContext(ContextType.Domain, "yourdomain"))
{
var user = UserPrincipal.FindByIdentity(context, username);
if (user != null)
{
ViewData["UserName"] = user.Name;
ViewData["EmailAddress"] = user.EmailAddress;
ViewData["FullName"] = user.DisplayName;
ViewData["GivenName"] = user.GivenName;
}
}
从您网站的角度来看,所有 Windows 代码 运行 都在某个 Windows 帐户下。
例如,如果您使用 IIS 和 Forms 身份验证,那么 Windows 对您一无所知 - 您很可能 运行 使用匿名帐户名,所有用户都将 运行 在下面。如果您向下钻取 运行ning 代码,可以在不同的代码级别找到不同的 Windows 帐户,例如在顶层代码、底层 IIS 线程等中。
您正在尝试为您的网站使用 Windows 帐户,但您必须确保 运行 所在的网络服务器也在使用 Windows 身份验证 - 我知道您在创建站点时选中了此选项。
您的用户身份可以转换为各种类型,因为无论使用哪种身份验证方法,它都必须无缝运行。您还可以检查您的用户,看看它是否属于特定的安全制度。
该代码获取登录您网站的用户的用户名,并在您的域中查找该用户名以查找有关此人的更多信息。
var username = User.Identity.Name;
User
属性 是 ControllerBase.User
,指的是当前登录您网站的用户。由于您使用的是 Windows 身份验证,因此这将引用 Active Directory 用户。 User.Identity.Name
只获取用户名。
其余用于在 Active Directory 中查找帐户。
new PrincipalContext(ContextType.Domain, "yourdomain")
这意味着“我想与一个名为 yourdomain
的域对话”。
UserPrincipal.FindByIdentity(context, username)
UserPrincipal.FindByIdentity
在域中找到一个帐户。所以这是说“在域中找到这个用户名”。
然后将帐户中的用户详细信息放入 ViewData
collection so that the data is accessible in the view. More details on that here。
您使用
获取安全原则信息
var context = new PrincipalContext(ContextType.Domain, "yourdomain")
PrincipleContext 是 class,一旦您创建了它的新实例,它就会包含信息,并传入域类型(枚举)和域名称(字符串)的参数。
USING 块确保在块完成后释放实例 - 否则您必须自己对该实例调用 DISPOSE(请记住,如果有异常,您可能没有捕获到它,因此您至少必须管理这种情况。
一旦你有了你的域上下文的实例,你就可以使用它来搜索(在 Windows 的情况下,LDAP 数据库)用户,无论是通过 SID 还是唯一名称,在你的情况下(每个名称都必须是唯一的 - 域中的两个用户不能具有相同的名称)。
该网站具有用户的安全 ID,您所遵循的代码会为该用户获取一个域对象,该对象具有您将显示的属性。您可以调用其他对象,这些对象可能会告诉您用户是哪些 Windows 安全组的成员。通过这种方式,您可以拥有一个网站,其中用户查看网页或单击按钮的能力取决于用户所属的域中的哪些组。
我试图通过 Windows 身份验证在我的 ASP.NET 核心 MVC 项目中访问用户的名字、姓氏等用户信息。我实际上是在网上搜索解决方案后让它工作的,但我对这些东西和初级程序员很陌生,所以不理解我只是在我的项目中复制粘贴的部分发生了什么。
我在该网站上也找不到任何解释。如果有人能向我解释这一点,我会很高兴。非常感谢。
此代码的参考网站:https://sensibledev.com/how-to-get-user-details-from-active-directory/
家庭控制器:
var username = User.Identity.Name;
using (var context = new PrincipalContext(ContextType.Domain, "yourdomain"))
{
var user = UserPrincipal.FindByIdentity(context, username);
if (user != null)
{
ViewData["UserName"] = user.Name;
ViewData["EmailAddress"] = user.EmailAddress;
ViewData["FullName"] = user.DisplayName;
ViewData["GivenName"] = user.GivenName;
}
}
从您网站的角度来看,所有 Windows 代码 运行 都在某个 Windows 帐户下。
例如,如果您使用 IIS 和 Forms 身份验证,那么 Windows 对您一无所知 - 您很可能 运行 使用匿名帐户名,所有用户都将 运行 在下面。如果您向下钻取 运行ning 代码,可以在不同的代码级别找到不同的 Windows 帐户,例如在顶层代码、底层 IIS 线程等中。
您正在尝试为您的网站使用 Windows 帐户,但您必须确保 运行 所在的网络服务器也在使用 Windows 身份验证 - 我知道您在创建站点时选中了此选项。
您的用户身份可以转换为各种类型,因为无论使用哪种身份验证方法,它都必须无缝运行。您还可以检查您的用户,看看它是否属于特定的安全制度。
该代码获取登录您网站的用户的用户名,并在您的域中查找该用户名以查找有关此人的更多信息。
var username = User.Identity.Name;
User
属性 是 ControllerBase.User
,指的是当前登录您网站的用户。由于您使用的是 Windows 身份验证,因此这将引用 Active Directory 用户。 User.Identity.Name
只获取用户名。
其余用于在 Active Directory 中查找帐户。
new PrincipalContext(ContextType.Domain, "yourdomain")
这意味着“我想与一个名为 yourdomain
的域对话”。
UserPrincipal.FindByIdentity(context, username)
UserPrincipal.FindByIdentity
在域中找到一个帐户。所以这是说“在域中找到这个用户名”。
然后将帐户中的用户详细信息放入 ViewData
collection so that the data is accessible in the view. More details on that here。
您使用
获取安全原则信息var context = new PrincipalContext(ContextType.Domain, "yourdomain")
PrincipleContext 是 class,一旦您创建了它的新实例,它就会包含信息,并传入域类型(枚举)和域名称(字符串)的参数。
USING 块确保在块完成后释放实例 - 否则您必须自己对该实例调用 DISPOSE(请记住,如果有异常,您可能没有捕获到它,因此您至少必须管理这种情况。
一旦你有了你的域上下文的实例,你就可以使用它来搜索(在 Windows 的情况下,LDAP 数据库)用户,无论是通过 SID 还是唯一名称,在你的情况下(每个名称都必须是唯一的 - 域中的两个用户不能具有相同的名称)。
该网站具有用户的安全 ID,您所遵循的代码会为该用户获取一个域对象,该对象具有您将显示的属性。您可以调用其他对象,这些对象可能会告诉您用户是哪些 Windows 安全组的成员。通过这种方式,您可以拥有一个网站,其中用户查看网页或单击按钮的能力取决于用户所属的域中的哪些组。