相关疑难解决方法(0)

使用C#查找递归组成员资格(Active Directory)

我希望得到一个用户在Active Directory中成为其成员的所有组的列表,这两个组都明确列在memberOf属性列表中,也隐式通过嵌套组成员身份列出.例如,如果我检查UserA并且UserA是GroupA和GroupB的一部分,我还想列出GroupC,如果GroupB是GroupC的成员.

为了让您更深入地了解我的应用程序,我将在有限的基础上进行此操作.基本上,我偶尔会想要进行安全检查,以便列出这些额外的会员资格.我想区分这两者,但这应该不难.

我的问题是我没有找到一种有效的方法来使这个查询工作.Active Directory上的标准文本(此CodeProject文章)显示了一种基本上是递归查找的方法.这似乎非常低效.即使在我的小域中,用户也可能拥有30多个组成员资格.这意味着为一个用户调用30多个Active Directory.

我查看了以下LDAP代码,以便一次获取所有memberOf条目:

(memberOf:1.2.840.113556.1.4.1941:={0})
Run Code Online (Sandbox Code Playgroud)

其中{0}将是我的LDAP路径(例如:CN = UserA,OU = Users,DC = foo,DC = org).但是,它不会返回任何记录.这种方法的缺点,即使它起作用,也就是我不知道哪个组是明确的,哪个是隐含的.

这就是我到目前为止所拥有的.我想知道是否有比CodeProject文章更好的方法,如果有的话,如何实现(实际代码将是美好的).我使用的是.NET 4.0和C#.我的Active Directory处于Windows 2008功能级别(它还不是R2).

.net c# active-directory

31
推荐指数
2
解决办法
3万
查看次数

我可以将用户与不同域中的组匹配吗?

我正在尝试编写一个LDAP查询,它将发现用户是否是与通配符查询匹配的组的成员,并且我正在尝试使用LDAP_MATCHING_RULE_IN_CHAIN OID来执行此操作.我基本上按照这个页面上的示例2:

http://support.microsoft.com/kb/914828

我发现这个方法在域内运行良好,即如果user1在group1中,group1在group2中,那么我可以编写一个匹配"*2"的查询,LDAP查询将找到嵌套关系并将用户与组匹配.

但是,现在我被要求支持同一个林中域之间的关系.所以现在我有:

  • user1是域1中group1的成员
  • 域1中的group1是域2中group2的成员

我希望能够将user1与group2相匹配....我无法弄清楚如何使LDAP_MATCHING_RULE_IN_CHAIN执行此操作:

我已经尝试将查询的基础设置为以下内容:

  1. 域1,但这只返回域1中的组
  2. 域1和域2的父域,但不返回任何结果.
  3. GC,通过查询"rootDSE"属性找到,但这只返回域1内的组(这是GC服务器)

谁知道我怎么能做这个工作?

ldap active-directory ldap-query

5
推荐指数
1
解决办法
3446
查看次数

标签 统计

active-directory ×2

.net ×1

c# ×1

ldap ×1

ldap-query ×1