UserPrincipal.GetGroups与UserPrincipal.GetAuthorizationGroups?

Edw*_*tto 9 c# active-directory asp.net-mvc-3

我使用ASP.Net 4.0 MVC来查询活动目录.我试图获取用户的组成员资格列表,并迭代它们.我有一个奇怪的问题.要获得我正在使用的组:

   PrincipalSearchResult<Principal> groups = up.GetGroups();
Run Code Online (Sandbox Code Playgroud)

哪个在localhost上工作得很好但在移动到IIS6时返回一个空集.所以我尝试使用这个:

    PrincipalSearchResult<Principal> groups = up.GetAuthorizationGroups();
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*ond 7

我假设GetAuthorizationGroups()在AD中调用tokenGroups.要读取它,您的服务帐户(或网络服务时的IIS计算机帐户)需要位于AD中的Windows授权访问组中.


Taw*_*kil 7

原因部分已得到解答,但这可能有助于想要了解两种方法之间功能差异的人。来自 MS 文档:

GetGroups - 返回组对象的集合,这些对象指定当前主体是其成员的组。

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

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

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

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

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