我正在尝试使用 .NET 3.5命名空间通过 SSL 加密的 LDAP 连接System.DirectoryServices.AccountManagement
针对我们的 Active Directory LDAP 服务器验证用户凭据。这是示例代码:
using (var pc = new PrincipalContext(ContextType.Domain, "sd.example.com:389", "DC=sd,DC=example,DC=com", ContextOptions.Negotiate))
{
return pc.ValidateCredentials(_username, _password);
}
此代码在不安全的 LDAP(端口 389)上运行良好,但我宁愿不以明文形式传输用户/密码组合。但是当我更改为 LDAP + SSL(端口 636)时,出现以下异常:
System.DirectoryServices.Protocols.DirectoryOperationException: The server cannot handle directory requests.
at System.DirectoryServices.Protocols.ErrorChecking.CheckAndSetLdapError(Int32 error)
at System.DirectoryServices.Protocols.LdapSessionOptions.FastConcurrentBind()
at System.DirectoryServices.AccountManagement.CredentialValidator.BindLdap(NetworkCredential creds, ContextOptions contextOptions)
at System.DirectoryServices.AccountManagement.CredentialValidator.Validate(String userName, String password)
at System.DirectoryServices.AccountManagement.PrincipalContext.ValidateCredentials(String userName, String password)
at (my code)
端口 636 用于其他活动,例如查找该 LDAP/AD 条目的非密码信息......
UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, _username)
...所以我知道这不是我的 LDAP 服务器的 SSL 设置,因为它可以通过 SSL 进行其他查找。
有没有人接到ValidateCredentials(...)
要求通过 SSL 工作的电话?你能解释一下怎么做吗?还是有另一种/更好的方法来安全地验证 AD/LDAP 凭据?