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

时间:2011-12-15 15:43:24

标签: asp.net directoryservices

我在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

1 个答案:

答案 0 :(得分:7)

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

  • 将IIS App Pool运行的帐户更改为域名
  • 在您的web.config文件中添加模拟部分,其中该帐户是域帐户
  • 在PrincipalContext中明确指定用户名/密码,用于对域进行身份验证。