AspNetWindowsTokenRoleProvider在ASP.NET中无法正常用于Windows身份验证

时间:2008-11-05 03:31:46

标签: asp.net windows authentication

我正在使用Windows身份验证在ASP.NET中开发Intranet应用程序。我创建了一个从Active Directory域控制器获取信息的AD类。这就是我用来获取当前登录用户所在的用户组之类的内容。问题出在用户所在的ASP.NET角色中。看起来很有趣,但用户所在的AD组列表完全是与用户拥有的角色列表不同。

这是我得到的:

certian用户的AD组列表

  1. 开发
  2. 帐户经营者
  3. Domain Admins
  4. IS_IUSRS
  5. 管理员
  6. 同一用户的角色列表

    1. PUDDOM \ Domain Users
    2. 每个人
    3. BUILTIN \用户
    4. BUILTIN \管理员
    5. NT AUTHORITY \ INTERACTIVE
    6. NT AUTHORITY \ Authenticated Users
    7. NT AUTHORITY \本组织
    8. LOCAL
    9. PUDDOM \ Domain Admins
    10. PUDDOM \拒绝RODC密码复制组
    11. PUDDOM \ DNSADMINS
    12. 其他信息:

      1. 我的网站使用IIS7的集成Windows身份验证。
      2. web.config的一部分看起来像
      3. 这样:

        <authentication mode="Windows"  />
        <authorization>
          <deny users="?" />
        
        </authorization>
        
        <roleManager defaultProvider="AspNetWindowsTokenRoleProvider"  enabled="true">
                <providers>
                    <remove name="AspNetSqlRoleProvider" />
                </providers>
        </roleManager>
        

        如何核对清单?

        我需要让我的角色列表反映与我的AD组列表相同的数据,因为我将在我的站点地图和其他内容中使用角色修剪。

2 个答案:

答案 0 :(得分:4)

部分结果是因为用户所属的某些群组是其他群组的成员。用户组的完整列表将包括用户所属的所有组,包括直接和通过其他也是成员的组的成员身份。

该列表还将包含默认情况下通常对本机管理工具隐藏的内置组。

最好的办法是让应用程序存储您希望应用程序查看的组的主列表,或者您希望应用程序忽略的组列表(包含列表或排除列表)。然后,当您撤回特定用户的角色时,只需将其与配置的排除或包含列表进行比较,然后过滤掉不需要的结果。

如果您想要一种更简单的方法,那么开源AD role provider over at codeproject已经支持排除和包含列表。它还有其他很好的功能,如可选的缓存,将真正加快您的应用程序。内置AD角色提供程序执行得非常糟糕。

答案 1 :(得分:0)

您可能需要专门为要枚举的组分配网站权限。