UserPrincipal.GetGroups与UserPrincipal.GetAuthorizationGroups?

时间:2012-06-22 18:22:27

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

为什么已经回答了,但是这可能有助于希望了解这两种方法之间功能差异的人。来自MS文档:

  

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

     

此重载方法仅返回主体直接为其成员的组;不会执行任何递归搜索。

     

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

     

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

因此GetGroups获得所有组,其中用户是直接成员,而GetAuthorizationGroups获得所有授权直接或间接成员的>组。

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