gpt4 book ai didi

c# - 来自 Active Directory 的 UserPrincipal

转载 作者:行者123 更新时间:2023-12-02 05:28:44 25 4
gpt4 key购买 nike

我在从 Active Directory 获取 UserPrincipal 时遇到问题。首先,我在我的本地环境中使用过(使用的不是 IIS,而是 ASP.NET 开发服务器):

User usr = new User();
usr.SoeId = Request.ServerVariables["LOGON_USER"];
usr.IP = Request.ServerVariables["REMOTE_ADDR"];
usr.FirstName = UserPrincipal.Current.GivenName;
usr.LastName = UserPrincipal.Current.Surname;

而且效果很好。我得到了我想要的。但是当我在测试环境中安装应用程序时,出现错误“对象引用未设置为对象的实例”。我试过 here 的解决方案.

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
{
UserPrincipal up = UserPrincipal.FindByIdentity(pc, usr.SoeId);
return up.DisplayName;
// or return up.GivenName + " " + up.Surname;
}

但它不起作用。

我使用 Windows 身份验证。模拟设置为 true。请帮我。

最佳答案

更改您的 ApplicationPool 的身份以使用域用户运行。

在 iis 6 中,右键单击您的应用程序池,转到 Identity 选项卡并设置池将在其下运行的域用户。

在 iis 7 中右键单击您的应用程序池,选择高级设置,在进程模型下您会找到 Identity,将其更改为使用域用户。

你也可以传递域用户并传递给PrincipalContest Constructor

using (PrincipalContext context = new PrincipalContext(
ContextType.Domain,
"name of your domain",
"container of your domain",
"user@domain", //create a user in domain for context creation purpose.. this username will be constant.. you can keep it in app config
"password")){
UserPrincipal up = UserPrincipal.FindByIdentity(pc, usr.SoeId);
return up.DisplayName;
}

如果您的域名是 dom.com 那么您的容器将类似于 DC=dom,DC=com 并且用户名应为 user@dom.comdom\user

关于c# - 来自 Active Directory 的 UserPrincipal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12692761/

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