Я немного растерялся с этим. Я звоню в .NET LdapConnection объект в следующем коде. Первый запрос работает просто отлично (SearchRequest) и использует тип аутентификации по умолчанию Negotiate.
В цикле foreach этого примера кода я пытаюсь выполнить привязку, чтобы проверить пароль пользователя, которого я жестко запрограммировал в searchRequest.
Я получаю хорошее DistinguishedName в моем SearchResultEntry, и Bind () работает, но ТОЛЬКО с AuthType.Basic. Ни одна из других опций не будет работать, и я не заинтересован в использовании базовой (небезопасной) аутентификации.
Идеи? * * 1002
public LoginResult Authenticate(string userName, string password)
{
LdapDirectoryIdentifier identifier = new LdapDirectoryIdentifier(_serverName, _port);
NetworkCredential credential = new NetworkCredential(_ServerUsername, _Serverpwd);
LdapConnection ldapConnection = new LdapConnection(identifier, credential);
ldapConnection.Timeout = new TimeSpan(0, 0, _timeout);
try
{
SearchRequest searchRequest = new SearchRequest
(_distinguisedName,
"(&(objectClass=user)(givenname=Joe)(sn=Smith))",
SearchScope.Subtree,
null);
// cast the returned directory response as a SearchResponse object
SearchResponse searchResponse =
(SearchResponse)ldapConnection.SendRequest(searchRequest);
// enumerate the entries in the search response
foreach (SearchResultEntry entry2 in searchResponse.Entries)
{
// Check password by rebinding connection
ldapConnection.AuthType = AuthType.Basic;
ldapConnection.Bind(new NetworkCredential(entry2.DistinguishedName, password));
}
}
catch (Exception e)
{
return LoginResult.Failure;
}
finally
{
ldapConnection.Dispose();
}
return LoginResult.Success;
}