9

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

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

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

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

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

4

2 回答 2

8

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

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

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

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

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

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

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

于 2018-09-17T15:51:43.577 回答
7

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

于 2012-06-22T21:02:47.400 回答