2009-06-12 8 views
5

Existe-t-il une classe d'assistance Active Directory disponible quelque part? Je vérifie juste avant de réinventer la roue.Classe d'assistance Active Directory

J'ai besoin de

  1. Valider un utilisateur dans AD.

  2. Obtenez les rôles de ses membres.

Merci

Répondre

10

Dans .NET 3.5, vous voulez regarder dans System.DirectoryServices.AccountManagement. Pour plus tôt, les versions System.DirectoryServices ont ce dont vous avez besoin, mais c'est un peu plus de travail.

using (var context = new PrincipalContext(ContextType.Domain)) 
{ 
     var valid = context.ValidateCredentials(username, password); 
     using (var user = UserPrincipal.FindByIdentity(context, 
                 IdentityType.SamAccountName, 
                 username)) 
     { 
      var groups = user.GetAuthorizationGroups(); 
     } 
} 
+0

Je développe sur un ordinateur portable ne faisant pas partie du domaine. Puis-je transmettre une telle demande à AD? –

+2

Si vos utilisateurs sont locaux sur la machine, vous pouvez utiliser ContextType.Machine au lieu de ContextType.Domain pour centrer vos requêtes sur le magasin d'autorisations local. – tvanfosson

3

Voici quelques exemples de code que je l'ai utilisé:

using System.DirectoryServices; 

public static string GetProperty(SearchResult searchResult, 
    string PropertyName) 
{ 
    if (searchResult.Properties.Contains(PropertyName)) 
     return searchResult.Properties[PropertyName][0].ToString(); 
    else 
     return string.Empty; 
} 

public MyCustomADRecord Login(string UserName, string Password) 
{ 
    string adPath = "LDAP://www.YourCompany.com/DC=YourCompany,DC=Com"; 

    DirectorySearcher mySearcher; 
    SearchResult resEnt; 

    DirectoryEntry de = new DirectoryEntry(adPath, UserName, Password, 
     AuthenticationTypes.Secure); 
    mySearcher = new DirectorySearcher(de); 

    string adFilter = "(sAMAccountName=" + UserName + ")"; 
    mySearcher.Filter = adFilter; 

    resEnt = mySearcher.FindOne(); 


    return new MyCustomADRecord() 
    { 
     UserName = GetProperty(resEnt, "sAMAccountName"), 
     GUID = resEnt.GetDirectoryEntry().NativeGuid.ToString(), 
     DisplayName = GetProperty(resEnt, "displayName"), 
     FirstName = GetProperty(resEnt, "givenName"), 
     MiddleName = GetProperty(resEnt, "initials"), 
     LastName = GetProperty(resEnt, "sn"), 
     Company = GetProperty(resEnt, "company"), 
     JobTitle = GetProperty(resEnt, "title"), 
     Email = GetProperty(resEnt, "mail"), 
     Phone = GetProperty(resEnt, "telephoneNumber"), 
     ExtensionAttribute1 = GetProperty(resEnt, "extensionAttribute1") 
    }; 
} 
+0

Je vous remercie de partager cela. –