gpt4 book ai didi

asp.net-mvc - .net mvc 与 Active Directory 集成并使用数据模型访问 System.DirectoryServices.AccountManagement

转载 作者:行者123 更新时间:2023-12-04 18:18:12 24 4
gpt4 key购买 nike

我正在构建一个 Intranet 应用程序,并且正在使用 Windows 身份验证。我有这个设置和工作,我可以通过@Context.User.Identity.Name 查看当前用户的用户名

我想查询 Active Directory 以检索显示名称、电子邮件地址等。

我查看了 System.DirectoryServices.AccountManagement 并从中创建了一个基本示例。我不清楚如何在我的应用程序中显示这些信息。

到目前为止,我所拥有的如下:

public class searchAD
{

// Establish Domain Context
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain);

public searchAD()
{
// find the user
UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, HttpContext.Current.User.Identity.Name);

if (user != null)
{
var userGuid = user.Guid;
var DisplayName = user.DisplayName;
var GivenName = user.GivenName;
var EmailAddress = user.EmailAddress;
}

}

}

我假设我需要像这样创建一个 ViewModel?
public class domainContext
{
public Nullable<Guid> userGuid { get; set; }
public string DisplayName { get; set; }
public string GivenName { get; set; }
public string EmailAddress { get; set; }
}

我希望能够在应用程序的各个部分访问这些信息。

我没有收到任何错误,只是似乎缺少将所有这些联系在一起的东西。

最佳答案

您缺少 Windows 身份部分。此外,请记住处理您正在使用的任何 AD 对象:

public class AdLookup
{
public static DomainContext GetUserDetails()
{
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
{
IPrincipal principal = HttpContext.Current.User;
WindowsIdentity identity = ((WindowsIdentity)principal.Identity);
UserPrincipal user = UserPrincipal.FindByIdentity(pc, identity.Name);

if (principal != null)
{
return new DomainContext() {
userGuid = user.Guid,
DisplayName = user.DisplayName,
GivenName = user.GivenName,
EmailAddress = user.EmailAddress
};
}
}

return null;
}
}

最好的办法是创建一个名为“BaseController”的类,您的所有其他 Controller 都从该类继承,并将此代码放在那里(理想情况下作为名为 DomainContext 的属性)。

要在整个应用程序中使用它,您还可以在基本 Controller 上添加一个方法来将此信息添加到 ViewData:
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
ViewData["BaseController_DomainContext"] = AdLookup.GetUserDetails();
}

然后,您可以使用以下方法访问从该任何继承 Controller 呈现的任何 View 上:
@{
DomainContext domainContext = (DomainContext)ViewData["BaseController_DomainContext"];
}

Welcome back: @domainContext.DisplayName

当然,您会遇到空值问题,但您可以在 GetUserDetails 方法中使用某种虚拟 DomainContext 来处理它。

这只是一种方法,或者您可以创建一个基本 View 模型,您的所有 View 模型都从中继承并直接在 View 中访问它们,但我发现这种方式更简单,因为您不会增加任何复杂性到您的 View 模型。

关于asp.net-mvc - .net mvc 与 Active Directory 集成并使用数据模型访问 System.DirectoryServices.AccountManagement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11295368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com