Étant donné un nom d'utilisateur et un mot de passe pour un utilisateur de domaine, quelle serait la meilleure façon d'authentifier cet utilisateur par programmation?Authentification des utilisateurs de domaine avec System.DirectoryServices
6
A
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.
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.).
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. –