我使用ASP.Net 4.0mvc来查询活动目录。我正在尝试获取用户的组成员资格列表,并对其进行迭代。我有个奇怪的问题。要获取我使用的组,请执行以下操作:
PrincipalSearchResult<Principal> groups = up.GetGroups();它在本地主机上工作得很好,但在移动到IIS6时会返回一个空集。所以我试着用这个:
PrincipalSearchResult<Principal> groups = up.GetAuthorizationGroups();它在IIS6上工作得很好,但在本地主机上返回一个空集。这两种方法有什么不同?为什么我可以在IIS6中使用,而不能在本地主机上使用?为什么我可以在本地主机上使用另一个,而不能在IIS6中使用?
发布于 2012-06-23 05:02:47
我假设GetAuthorizationGroups()在AD中调用tokenGroups。若要阅读此信息,您的服务帐户(如果是网络服务,则为IIS计算机帐户)需要位于AD中的Windows授权访问组中。
发布于 2018-09-17 23:51:44
为什么部分已经回答了,但这可能对想要了解这两种方法之间的功能差异的人有所帮助。来自MS文档:
GetGroups -返回组对象的集合,这些对象指定当前承担者是其成员的组。
此重载方法仅返回主体直接是其成员的组;不执行递归搜索。
GetAuthorizationGroups -返回主体对象的集合,其中包含此用户所属的所有授权组。此函数仅返回属于安全组的组;不返回通讯组。
此方法以递归方式搜索所有组,并返回用户所属的组。返回的集合还可以包括系统出于授权目的而将用户视为其成员的附加组。
因此,GetGroups获取用户是直接成员的所有组,而GetAuthorizationGroups获取用户是直接或间接成员的所有组。
尽管它们的命名方式不同,但其中一个不是另一个的子集。可能存在GetAuthorizationGroups未返回的GetGroups返回的组,反之亦然。
https://stackoverflow.com/questions/11162008
复制相似问题