Аутентификация пользователей домена с помощью System.DirectoryServices - PullRequest
7 голосов
/ 27 августа 2008

С учетом имени пользователя и пароля для пользователя домена, что будет лучшим способом для аутентификации этого пользователя программно?

Ответы [ 2 ]

17 голосов
/ 28 августа 2008

Похоже, что .NET 3.5 добавил новое пространство имен для решения этой проблемы - System.DirectoryServices.AccountManagement. Пример кода ниже:

Private Function ValidateExternalUser(ByVal username As String, ByVal password As String) As Boolean
    Using context As PrincipalContext = New PrincipalContext(ContextType.Domain, _defaultDomain)
        Return context.ValidateCredentials(username, password, ContextOptions.Negotiate)
    End Using
End Function

Пространство имен также, по-видимому, предоставляет множество методов для управления учетной записью домена (изменение паролей, истечение срока действия паролей и т. Д.).

9 голосов
/ 28 августа 2008

Вы можете использовать некоторые хаки для аутентификации только .

Try
    Dim directoryEntry as New DirectoryEntry("LDAP://DomainController:389/dc=domain,dc=suffix", "username", "password")
    Dim temp as Object = directoryEntry.NativeObject
    return true
Catch
    return false
End Try

Если пользователь недействителен, запись каталога NativeObject не может быть доступна и выдает исключение. Хотя это не самый эффективный способ (исключения - зло, бла-бла-бла), он быстрый и безболезненный. Это также имеет превосходное преимущество работы со всеми серверами LDAP, а не только с AD.

...