ASP.NET用户未显示所有Active Directory组

时间:2012-01-06 21:44:43

标签: asp.net .net .net-4.0 active-directory

我正在尝试使用Windows身份验证和活动目录组来管理应用程序中的安全性。我遇到的问题是,在我试图验证的页面后面的代码中,用户点击ASP.NET网站是特定AD组的成员,然后根据它显示/隐藏一些项目。我遇到的问题是,我似乎无法获得用户所属的所有组以进行测试。我已经包含了下面的代码,用于列出用户所属的所有组。此代码确实返回了许多组,但它没有返回所有组。我已在AD控制器中验证所有组似乎设置相同。我有什么想法吗?

Private Function GetCurrentGroups() As ArrayList
    Dim groups As New ArrayList()
    For Each group As System.Security.Principal.IdentityReference In System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups
        groups.Add(group.Translate(GetType(System.Security.Principal.NTAccount)).ToString())
    Next

    groups.Sort()

    Return groups
End Function

2 个答案:

答案 0 :(得分:7)

您没有做错任何事 - 您很可能只看到用户的直接组成员资格。

任何嵌套成员资格 - User成为GroupA的成员,后者又是GroupB的成员 - 通常不会显示 - 所以在这种情况下,你会看到GroupA但不会GroupB

如果您确实需要此信息,则必须直接询问Active Directory(使用类似System.DirectoryServices.AccountManagement命名空间 - great MSDN article about using it)。

S.DS.AM命名空间包含代表AD中用户的类UserPrincipal,此类有一个名为.GetAuthorizationGroups()的方法,返回< strong>所有组用户所属的组 - 包括嵌套组。

答案 1 :(得分:0)

另一种可能性是这个。 假使,假设 AD群组 G 且位于 A 域中 域 B 中的用户 U G 的成员(这在通用组中是可行的) 如果 A 信任 B 但反之亦然,则调用 G.GetMembers 将返回该用户。但是,如果您致电 U.GetGroups 将返回不返回域 A 中的AD组。