2008-08-27 4 views

ответ

8

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

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.

+2

Вы никогда не должны ломать ВСЕ исключения, подобные этому ... COMException - это то, что будет выброшено, если вы не сможете получить доступ к серверу LDAP, так что это то, что вы будете ловить. – 2011-01-06 04:29:02

16

Похоже, что .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 

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