我有一个MVC应用程序,需要登录并根据Active Directory验证用户。我正在使用PrincipalContext.ValidateCredentials
方法,但始终得到false
的身份验证。PrincipalContext.ValidateCredentials始终返回FALSE
连接到服务器没问题。该问题似乎发生在ValidateCredentials
。
这里是我的代码:
public static bool IsAuthenticated(string domain, string username, string pwd) {
bool IsAuthenticated = false;
try {
PrincipalContext insPrincipalContext =
new PrincipalContext(ContextType.Domain, domain, "DC=c1w,DC=com");
username = "c1w\\" + username;
IsAuthenticated = insPrincipalContext.ValidateCredentials(username, pwd);
}
catch (Exception ex)
{
// Rethrow this exception
ExceptionPolicy.HandleException(ex, "Exception Policy");
}
return IsAuthenticated;
}
任何人都知道为什么会发生?
编辑该问题以包含整个方法。将尝试ContextOption建议。谢谢。 – 2010-03-02 14:27:04
B-Rain, ContextOption参考指出我正确的方向。在我对AD和ContextOptions.SimpleBind的验证凭证调用上使用ContextOptions.Negotiate结束。简单的绑定将为我工作,因为该网站将SSL安全。 感谢您的帮助。 – 2010-03-02 15:30:19
Upvoted这个问题和答案,因为这也帮助我在我的情况。在我的情况下,我的开发机器(登录工作时没有指定上下文)位于网络上的安全区域,但Web服务器(登录在没有指定上下文的情况下无法工作)位于DMZ中。我使用与@Billy Logan相同的配置 - 在validate调用上协商AD和SimpleBind的调用。 – arootbeer 2010-10-14 19:52:03