Учитывая имя пользователя и пароль для пользователя домена, какой был бы лучший способ аутентифицировать этого пользователя программно?
Аутентификация пользователей домена с помощью System.DirectoryServices
Ответ 1
Похоже, что .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
Пространство имен также, похоже, предоставляет множество методов для управления учетной записью домена (изменение паролей, истекающих паролей и т.д.).
Ответ 2
Вы можете использовать некоторые хаки только для аутентификации.
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.