UserPrincipal.FindByIdentity 在 IIS 服务器上返回 null

发布于 2024-12-21 04:49:42 字数 972 浏览 1 评论 0原文

我在 ASP.NET 中有以下代码示例

        using (PrincipalContext domainContext = new PrincipalContext(ContextType.Domain))
        {
            using (UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, HttpContext.Current.User.Identity.Name))
            {
                if (user == null)
                {
                    lbName.Text = "No User Principal";
                }
                else
                {
                    lbName.Text = user.DisplayName;
                }
            }
        }

web.config 看起来像

<authentication mode="Windows" />
<authorization>
  <deny users="?" />
</authorization>

我在本地开发计算机上尝试了代码(域的一部分,以域用户身份登录,VS2010,.Net 4.0,Windowx XP)在本地进行测试,我能够获取 UserPrincipal 对象。

如果我部署到 WIndows 2003(也是域的一部分)、IIS6、.Net 4.0,并在网络服务下运行应用程序池,我会关闭匿名访问。但代码无法获取 UserPrincipal 对象。

我是否必须将应用程序池更改为在域帐户下运行才能获取 UserPrincipal

I have following code sample in ASP.NET

        using (PrincipalContext domainContext = new PrincipalContext(ContextType.Domain))
        {
            using (UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, HttpContext.Current.User.Identity.Name))
            {
                if (user == null)
                {
                    lbName.Text = "No User Principal";
                }
                else
                {
                    lbName.Text = user.DisplayName;
                }
            }
        }

The web.config looks like

<authentication mode="Windows" />
<authorization>
  <deny users="?" />
</authorization>

I tried the code on my local development machine (part of domain, logon as domain user, VS2010, .Net 4.0, Windowx XP) to test locally, I am able to get UserPrincipal object.

If I deploy to WIndows 2003 (also part of the domain), IIS6, .Net 4.0 with application pool running under Network Service, I turned off anonymous access. But the code is not able to get UserPrincipal object.

Do I have to change application pool to run under a domain account in order to get UserPrincipal?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

错々过的事 2024-12-28 04:49:42

它在您的开发盒上工作而不是在您的产品盒上工作的原因是,在您的开发盒上,网站在您的网络 ID 下运行,该网络 ID 具有域权限,但在生产中,它在网络服务下运行,该网络服务对您的域没有权限。您可以:

  • 将运行 IIS 应用程序池的帐户更改为域一
  • 将模拟部分添加到 web.config 文件,其中该帐户是域帐户
  • 在 PrimaryContext 中显式指定将用于进行身份验证的用户名/密码到域。

The reason it worked on your dev box and not on your prod box is that on your dev box the website ran under your network ID, which had domain rights, but in production it's running under network service which has no rights to your domain. You can either:

  • Change the account the IIS App Pool runs under to a domain one
  • Add an impersonation section to your web.config file, where the account is a domain account
  • Explicitely specify a username/password in your PrincipalContext which will be used to authenticate to the domain.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文