Active Directory Get User's groups using LDAP

本文提供了一种通过LDAP查询Active Directory中用户所属组的方法,包括获取用户SID和组名的具体实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过LDAP查找AD User所属的ADGroupy

  1         /// <summary>

 2           ///  获得用户所属组的SID
 3           ///   </summary>
 4           ///   <code> Comes From  http://netwenchao.cnblogs.com </code>
 5           ///   <returns></returns>
 6           public  static IEnumerable< string> GetGroupSidsOfUser( string userLoginName, ADOperator operater)
 7         {
 8              using (DirectorySearcher directorySearcher =  new DirectorySearcher(
 9                  new DirectoryEntry( string.Format( " LDAP://{0} ", operater.ManageDomainName), operater.UserLogonName, operater.Password, AuthenticationTypes.Secure),
10                  string.Format( " (&(objectcategory=user)(samaccountname={0})) ", GetUserName(userLoginName)),
11                  new  string[] { ADUserAttributes.SamAccountName }))
12             {
13                  var result = directorySearcher.FindOne();
14                  if (result !=  null)
15                 {
16                     DirectoryEntry directoryEntry = result.GetDirectoryEntry();
17                     directoryEntry.RefreshCache( new  string[] { ADUserAttributes.TokenGroupsGlobalAndUniversal });
18                      for ( int index =  0; index < directoryEntry.Properties[ADUserAttributes.TokenGroupsGlobalAndUniversal].Count; index++)
19                     {
20                          yield  return ConvertBinarySidToString(( byte[])directoryEntry.Properties[ADUserAttributes.TokenGroupsGlobalAndUniversal][index]);
21                     }
22                 }
23             }
24              yield  break;
25         }
26 
27          ///   <summary>
28           ///  获得用户所属组的AccountName
29           ///   </summary>
30           ///   <param name="userLoginName"></param>
31           ///   <param name="operater"></param>
32           ///   <code> Comes From  http://netwenchao.cnblogs.com </code>
33           ///   <returns></returns>
34           public  static IEnumerable< string> GetGroupsOfUser( string userLoginName, ADOperator operater)
35         {
36              using (DirectorySearcher directorySearcher =  new DirectorySearcher(
37                  new DirectoryEntry( string.Format( " LDAP://{0} ", operater.ManageDomainName), operater.UserLogonName, operater.Password, AuthenticationTypes.Secure),
38                  "",
39                  new  string[] { ADUserAttributes.SamAccountName }))
40             {
41                 IList< string> groups =  new List< string>();
42                 SearchResult sr =  null;
43                  var sids = GetGroupSidsOfUser(userLoginName, operater);
44                  if (!sids.Any())  return  null;
45                  foreach ( var sid  in sids)
46                 {
47                     directorySearcher.Filter =  string.Format( " objectsid={0} ", sid);
48                     sr = directorySearcher.FindOne();
49                      if ( null != sr && sr.Properties[ADUserAttributes.SamAccountName].Count >  0) groups.Add(sr.Properties[ADUserAttributes.SamAccountName][ 0].ToString());
50                 }
51                  return groups;
52             }
53         }

Comes From http://netwenchao.cnblogs.com

转载于:https://www.cnblogs.com/netwenchao/archive/2012/05/25/2518229.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值