Como eu valido creds do Active Directory sobre LDAP + SSL?
Estou tentando usar o .NET 3.5System.DirectoryServices.AccountManagement
namespace para validar as credenciais do usuário em relação ao nosso servidor LDAP do Active Directoryatravés de uma conexão LDAP criptografada por SSL. Aqui está o código de amostra:
using (var pc = new PrincipalContext(ContextType.Domain, "sd.example.com:389", "DC=sd,DC=example,DC=com", ContextOptions.Negotiate))
{
return pc.ValidateCredentials(_username, _password);
}
Esse código funciona bem no LDAP não seguro (porta 389), no entanto, prefiro não transmitir uma combinação de usuário / senha em texto não criptografado. Mas quando mudo para o LDAP + SSL (porta 636), recebo a seguinte exceção:
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)
A porta 636 funciona para outras atividades, como procurar informações que não sejam de senha para essa entrada LDAP / AD ...
UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, _username)
... então eu sei que não é a configuração SSL do meu servidor LDAP, já que funciona sobre SSL para outras pesquisas.
Alguém já recebeu oValidateCredentials(...)
chamar para trabalhar sobre SSL? Você pode explicar como? Ou existe outra maneira melhor de validar com segurança as credenciais do AD / LDAP?