无效的凭据使用LdapConnection连接到AD / LDS

时间:2019-02-12 07:27:43

标签: c# active-directory ldap

我的计算机上运行着一个AD / LDS实例,我试图使用System.DirectoryServices.Protocols.LdapConnection类连接到它。由于某种原因,每次我调用Bind()方法时,它都会引发一个LdapException,抱怨凭证无效。

这是我用来建立连接的代码:

var ldapDirectoryIdentifier = new LdapDirectoryIdentifier(config.Server.Host, config.Server.Port);

var creds = new NetworkCredential(config.Credentials.Username, config.Credentials.Password)
{
    Domain = config.Credentials.
};

ldapConnection = new LdapConnection(ldapDirectoryIdentifier, creds, AuthType.Basic);

if (config.Server.Secure)
{
    cert = new X509Certificate(config.Server.Certificate);
    ldapConnection.SessionOptions.SecureSocketLayer = true;
    ldapConnection.SessionOptions.VerifyServerCertificate = CheckCertificate;
}

ldapConnection.SessionOptions.ProtocolVersion = 3;

try
{
    ldapConnection.Bind();
}
catch (LdapException e)
{
    Log.LogException(e);
    Environment.Exit(e.ErrorCode);
}

该配置来自App.config文件,如以下示例所示:

<server host="host" port="389"/>
<credentials username="username" password="password" domain="domain"/>
<usersearch base="ou=test,dc=test,dc=com" filter="(middlename=user)" objectclass="inetorgperson"/>
<devicesearch base="ou=test,dc=test,dc=com" filter="(sn=device)" objectclass="inetorgperson"/>

我试图修改凭证部分以使其连接;设置username="DOMAIN\user"(带或不带凭据的域条目)。我试过弄乱连接字符串,例如<server host="LDAP://host[:389]"/>。这只是说我用来通过ADSI Edit和ldp连接到实例的凭据无效。

我可以使用System.DirectoryServices.DirectoryEntry使用相同的域凭据(本地用户帐户)进行连接,因此我怀疑AD / LDS的AD位很挑剔。

有人有什么主意吗?

2 个答案:

答案 0 :(得分:0)

它可能在会话选项上。尝试强制使用身份验证类型:

ldapConnection.AuthType = AuthType.Negotiate;

这也可能是您处理证书的方式。尝试通过以下方式添加它:

ldapConnection.ClientCertificates.Add(cert);

答案 1 :(得分:0)

我继续仔细检查了哪些AuthTypes可用,并将其设置为Ntlm有效。