【问题标题】:UserPrincipal.GetGroups vs. UserPrincipal.GetAuthorizationGroups?UserPrincipal.GetGroups 与 UserPrincipal.GetAuthorizationGroups?
【发布时间】:2023-03-18 22:18:01
【问题描述】:

我正在使用 ASP.Net 4.0 MVC 来查询活动目录。我正在尝试获取用户组成员身份的列表并遍历它们。我有一个奇怪的问题。要获取我正在使用的组:

   PrincipalSearchResult<Principal> groups = up.GetGroups();

这在 localhost 上运行良好,但在移动到 IIS6 时返回一个空集。所以我尝试使用这个:

    PrincipalSearchResult<Principal> groups = up.GetAuthorizationGroups();

这在 IIS6 上运行良好,但在 localhost 上返回一个空集。这两种方法有什么区别?为什么我可以在 IIS6 中使用一个,而不是在 localhost 上?为什么我可以在 localhost 而不是在 IIS6 中使用另一个?

【问题讨论】:

  • “GetGroups”和“GetAuthoriazationGroups”的主要区别:“GetGroups”只返回委托人直接所属的组;不执行递归搜索。但是“GetAuthorizationGroups”返回嵌套组(例如:User1 > Group1 > Group2:User1 是 Group2 的间接成员,因为 Group1 是 Group2 的成员。方法“GetGroups”不返回 Group2)。
  • 发布的解决方案都不适合我,所以我最终只使用 DirectoryEntry 类直接使用 AD。

标签: c# asp.net-mvc-3 active-directory


【解决方案1】:

已经回答了为什么部分,但这可能有助于想知道这两种方法之间功能差异的人。来自 MS 文档:

GetGroups - 返回组对象的集合,这些对象指定当前主体所属的组。

这个重载方法只返回主体直接所属的组;不执行递归搜索。

GetAuthorizationGroups - 返回主体对象的集合,其中包含该用户所属的所有授权组。此函数仅返回属于安全组的组;不返回通讯组。

此方法递归搜索所有组并返回用户所属的组。返回的集合还可能包括其他组,系统会出于授权目的将用户视为其成员。

所以GetGroups 获得all 用户是直接 成员的组,GetAuthorizationGroups 获得所有授权 组用户是直接或间接成员。

尽管它们的命名方式不同,但其中一个不是另一个的子集。可能有GetGroups返回的组,GetAuthorizationGroups没有返回,反之亦然。

【讨论】:

    【解决方案2】:

    我假设GetAuthorizationGroups() 调用了 AD 中的 tokenGroups。要阅读它,您的服务帐户(或 IIS 计算机帐户,如果是网络服务)需要位于 AD 中的 Windows 授权访问组中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多