Za pomocą C# bez problemu można obsłużyć uwierzytelnianie za pomocą Active Directory. W dalszej części wpisu zostaną umieszczone fragmenty kodu ilustrujące ten problem.

Dodanie odpowiednich bibliotek:

using System.DirectoryServices; 
using System.DirectoryServices.AccountManagement;

Sprawdzenie czy użytkownik jest zalogowany:

public bool AuthenticateUser(string domainName, string userName, string password)
{
     try
     {
          using(var context = new PrincipalContext(ContextType.Domain, domainName, userName, password)) {
          if (context.ValidateCredentials(userName, password))
          {
               return true;
          }
     }
     catch
     {
          return false;
     }
}

Pobranie ID użytkownika

public Guid? GetUserGuid(string domain, string username)
{
      PrincipalContext context = new PrincipalContext(ContextType.Domain);
      UserPrincipal user = UserPrincipal.FindByIdentity(context, domain + @"\" + username);
      UserPrincipal user = UserPrincipal.Current;

      return user.Guid;
}

Pobranie listy grup użytkownika


public List GetGroups(string userName)
{
      List result = new List();
      List groupNames = new List();

      PrincipalContext yourDomain = new PrincipalContext(ContextType.Domain);
      UserPrincipal user = UserPrincipal.FindByIdentity(yourDomain, userName);

      if (user != null)
      {
           GroupPrincipal prototype = new GroupPrincipal(yourDomain);
           PrincipalSearcher searcher = new PrincipalSearcher(prototype);

           foreach (var gp in searcher.FindAll())
           {
                GroupPrincipal group = gp as GroupPrincipal;

                if (group != null)
                {
                     if (user.IsMemberOf(group))
                     {
                          groupNames.Add(group.Name) ;
                     }
                }
            }
      }

      return groupNames;
}

Mam nadzieję, że powyższe fragmenty kodu się przydadzą:)