如何区分使用kerberos身份验证的AD(System.Runtime.InteropServices.COMException)异常

时间:2017-10-23 14:50:14

标签: c# authentication active-directory kerberos ntlm

我们使用以下代码验证用户凭据,

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时识别各种登录失败?

0 个答案:

没有答案