Common.Net library methods: Querying Active Directory for users and groups
Finding the groups a user belongs to in active directory along with the members of that group is something that comes up a lot when .Net apps use Active Directory for authentication. Here are some common library methods to find members of a group or groups a member belongs to. This code requires a reference to System.DirectoryServices.AccountManagement.
using System;
using System.Collections.Generic;
using System.DirectoryServices.AccountManagement;
using System.Linq;
public class ActiveDirectoryGateway
{
private readonly string domain;
private readonly ContextType contextType;
public ActiveDirectoryGateway(ContextType contextType, string domain)
{
this.contextType = contextType;
this.domain = domain;
}
/// <summary>
/// Retrieves a list of AD groups belonging to an AD User.
/// </summary>
/// <param name="user">The active directory user.</param>
/// <returns>A list of AD groups the user belongs to.</returns>
public virtual IEnumerable<string> FindGroups(string user)
{
var list = new List<string>();
using (var context = new PrincipalContext(this.contextType, this.domain))
{
using (var userPrincipal = UserPrincipal.FindByIdentity(context, user))
{
if (userPrincipal == null)
{
return list;
}
using (var results = userPrincipal.GetGroups())
{
list.AddRange(results.Select(result => result.Name));
}
}
}
list.Sort();
return list;
}
/// <summary>
/// Lists members of group.
/// </summary>
/// <param name="grp">The AD group.</param>
/// <returns>A list of AD members of the group.</returns>
public virtual IEnumerable<string> FindMembersOfGroup(string grp)
{
var list = new List<string>();
using (var context = new PrincipalContext(this.contextType, this.domain))
{
using (var group = GroupPrincipal.FindByIdentity(context, grp))
{
if (group == null)
{
return list;
}
list.AddRange(group.GetMembers(true).Select(result => result.Name));
}
}
return list;
}
}
Comments
Post a Comment