【问题标题】:Active Directory/LDAP equivalent of namespaces?Active Directory/LDAP 相当于命名空间?
【发布时间】:2011-01-14 14:43:50
【问题描述】:

在代码中,我的“员工”角色采用Category.Role 格式,其中Category 是一种角色。例如,Foo.BarFoo.Foobar -- 都是 Foo 角色。 Foo 实际上不是我项目中的命名空间,但我是这样考虑的。

在 Active Directory 中是否有一些容器或分层角色/组等效项,我可以分配和/或读出 LDAP 查询,这样我就可以使用 any @987654326 查询每个人@角色,还是特定的Foo.X角色?

【问题讨论】:

  • 你说的是阿兹曼角色吗?或者您说的是使用 AD 组作为角色?
  • 您能否创建 AD 组 Parent,然后将 AD 组 Child1 和 Child2 添加到组 Parent。然后,添加到 Child1 的用户自动具有角色 Parent 和 Child1。如果您使用 IsInRole(),它应该会自动工作。

标签: c# namespaces active-directory ldap


【解决方案1】:

在 Active Directory 中,您可以将组分配为另一个组的成员。因此,如果我理解正确,您想要的是创建一个名为“Foo”的 AD 组,然后创建两个名为“Foo.Bar”和“Foo.Foobar”的子组。将这两个子组指定为组“Foo”的成员。

然后,对于分配到组“Foo.Bar”的用户。他将扮演“Foo”和“Foo.Bar”的角色。这意味着如果您获得了该用户的 WindowsPrincipal,WindowsPrincipal.IsInRole("Foo") 和 WindowsPrincipal.IsInRole("Foo.Bar") 都会返回 true。

如果您不是使用 IsInRole() 函数来检查成员资格,而是使用纯粹的 LDAP 查询,恐怕我们无法找到一种简单的方法来解决嵌套组关系。如果您真的想研究进行单个 LDAP 查询调用的方法,请尝试在 AD 用户对象上查找“tokenGroups”属性。它是由 AD 动态计算的计算属性。它包含所有嵌套组信息。唯一的事情是它正在存储 SID。因此,您需要找出您的 AD 组的 SID,将其转换为 LDAP 二进制格式并进行查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-17
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多