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

5
我在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、Windows XP),进行了本地测试,我能够获取UserPrincipal对象。

如果我部署到运行在Network Service下的IIS6、.NET 4.0的WIndows 2003上(也是域的一部分),我关闭了匿名访问。但是这段代码不能得到UserPrincipal对象。

我需要改变应用程序池以便使用域账户来获得UserPrincipal吗?

1个回答

7
在您的开发环境中可以正常使用,但在生产环境中不能使用的原因是,网站在开发环境下运行在您的网络ID下,该ID具有域权限,而在生产环境中它运行在网络服务下,该服务没有访问域的权限。您可以进行以下操作之一:
  • 将IIS应用程序池运行的帐户更改为域帐户
  • 在您的web.config文件中添加模拟部分,其中帐户是域帐户
  • 明确指定一个用户名/密码在您的PrincipalContext中,这将用于对域进行身份验证。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接