【问题标题】:ASP.NET User not showing all Active Directory GroupsASP.NET 用户未显示所有 Active Directory 组
【发布时间】:2012-01-06 21:44:43
【问题描述】:

我正在尝试使用 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

【问题讨论】:

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


    【解决方案1】:

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

    任何嵌套成员资格 - UserGroupA 的成员,而后者又是 GroupB 的成员 - 通常不会显示 - 因此在这种情况下,您会看到 GroupA 但不是GroupB

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

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

    【讨论】:

    【解决方案2】:

    另一种可能性是这样。 假使,假设 AD 组是 G 并且在域 AB 域中的用户 UG 的成员(这在通用组中是可能的) 如果 A 信任 B 但反之不信任,则调用 G.GetMembers 将返回用户。但是,如果您调用 U.GetGroups 将返回不返回域 A 中的 AD 组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      相关资源
      最近更新 更多