我们使用以下代码验证用户凭据,
string domainAndUsername = this.activeDirectoryConfiguration.Domain + @"\" + username;
DirectoryEntry entry = null;
try
{
entry = new DirectoryEntry(
this.activeDirectoryConfiguration.LdapPath,
domainAndUsername,
password);
// Bind to the native AdsObject to force authentication.
object nativeObject = entry.NativeObject;
if (nativeObject == null)
{
return AuthenticationDetails.InvalidCredentials;
}
}
catch (DirectoryServicesCOMException directoryServicesComException)
{
return this.CheckErrorResponse(username, directoryServicesComException);
}
finally
{
if (entry != null)
{
entry.Dispose();
}
}
使用NTLM身份验证时,此代码可以正常工作。在这里,我们检查从“DirectoryServicesCOMException”获取的错误代码,以确定帐户是被锁定还是禁用,或者密码是否过期。
在我们的生产环境中,在此代码失败的地方使用kerberos身份验证。它抛出System.Runtime.InteropServices.COMException,它没有关于失败的详细描述。每次它只是抛出 消息=登录失败:未知用户名或密码错误。
有人可以建议为什么Kerberos没有提供详细的例外,或者有没有办法在使用kerberos时识别各种登录失败?