在IIS部署在cassini中正常工作后,PrincipalContext.ValidateCredentials停止验证

时间:2011-11-15 09:19:35

标签: c# iis active-directory

我有以下代码片段来测试针对AD的纯文本用户名/密码,如果我在visual studio中点击F5并通过WCFTestClient尝试它,它可以正常工作,但是一旦我部署到IIS并尝试相同的功能,对于ValidCredentials,它永远不会返回true;是否需要为应用程序池运行的标识设置安全性?

我尝试将应用程序池标识设置为我自己的帐户(域管理员)只是为了测试这是否是问题,但这也无济于事,所以我对如何解决这个问题感到有点迷茫。 / p>

网站(自定义API)设置了匿名访问。

try
{
    // create a "principal context" - e.g. your domain (could be machine, too) 
    using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, DomainName))
    {
        // validate the credentials
        if (pc.ValidateCredentials(UserName, Password))
        {
            IsValid = true;
            break;
        }
    }
}
catch (Exception)
{
    LoggingControler.LogWarning(null, "Unreachable Domain: " + Domain);
}

我再次讨论过这个问题,这完全归功于Windows中的权利。网络服务以某种方式没有足够的权限来执行PrincipalContext.ValidateCredentials。如果我将应用程序池标识更改为域管理员的标识,则代码可以正常运行。

如果有人可以告诉我如何设置具有执行PrincipalContext.ValidateCredentials的适当权限的受限用户帐户,我可以完成此操作。

2 个答案:

答案 0 :(得分:0)

您是否启用了Windows Authentication in IIS

答案 1 :(得分:0)

好的,我终于通过https://stackoverflow.com/questions/5140377/query-activedirectory-sometimes-not-working-asp-net-chttps://elgg.leeds.ac.uk/webteam/weblog/15385.html

找到了自己的答案

正如我所发现的,“网络服务”应用程序池标识是解决此问题的关键......

添加读取权限不起作用;所以还有其他问题。