2008-08-27 7 views

Répondre

8

Vous pouvez utiliser certains hacks pour uniquement authentifier.

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 

Si l'utilisateur n'est pas valide, l'entrée de répertoire NativeObject n'est pas accessible et déclenche une exception. Bien que ce ne soit pas le moyen le plus efficace (les exceptions sont mauvaises, bla bla bla), c'est rapide et indolore. Cela a également l'avantage super-cool de travailler avec tous les serveurs LDAP, pas seulement AD.

+2

vous ne devriez jamais attraper TOUTES les exceptions comme ça ... COMException est ce qui sera jeté quand vous ne pouvez pas accéder au serveur LDAP de sorte que c'est ce que vous attraper. –

16

Il semble que .NET 3.5 ait ajouté un nouvel espace de noms pour résoudre ce problème - System.DirectoryServices.AccountManagement. Exemple de code est ci-dessous:

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 

L'espace de noms semble également fournir beaucoup de méthodes pour manipuler un compte de domaine (changement des mots de passe, mots de passe venant à échéance, etc.).

Questions connexes