【问题标题】:Creating a role based ASP.NET menu using sitemap control for ADFS authentication mechanism使用站点地图控件为 ADFS 身份验证机制创建基于角色的 ASP.NET 菜单
【发布时间】:2011-11-18 21:02:54
【问题描述】:

我目前正在使用 ADFS 身份验证机制对用户进行身份验证。在这种情况下,我将 authenticationmode 设置为 None 而不是表单身份验证。在用户成功登录后,声明对象将提供与已登录用户关联的角色数据,因此在这种情况下,站点地图角色属性将如何能够从声明对象中获取角色。你能解释一下如何使用 securityTrimmingEnabled 属性吗?

我使用了自定义类 ADFSRoleProvider.cs,它继承了 RoleProvider 类并覆盖了 GetRolesForUser 方法,但除非我设置了,否则该方法不会被调用

<authentication mode="Forms"/>

这反过来也不能与 siteMapNode 节点中提到的角色属性交互。

主要问题是用户使用ADFS身份验证机制成功登录后,站点地图角色属性如何知道登录用户的角色。

能否就上述问题提供一些代码示例和帮助。

【问题讨论】:

    标签: asp.net web.sitemap


    【解决方案1】:

    您确定需要自定义角色提供程序吗? IClaimsPrincipal 对象为用户提供角色,它接受您的ClaimTypes.Role 类型声明。

    您的问题可能是由 securityTrimming 实现中的一些不一致引起的。多年前,我不得不编写自己的站点地图提供程序来正确处理修剪。

       public class XmlSiteMapDefaultProvider : XmlSiteMapProvider
       {
        public override bool IsAccessibleToUser( HttpContext context, SiteMapNode node )
        {
            if ( node.Roles.Count > 0 )
            {
                foreach ( string role in node.Roles )
                    if ( role == "*" &&
                         context.User != null &&
                         context.User.Identity != null &&
                         context.User.Identity.IsAuthenticated
                         )
                        return true;
                    else
                    {
                        if ( context.User != null )
                            if ( context.User.IsInRole( role ) )
                                return true;
                    }
    
                return false;
            }
    
            return true;
        }
    }
    

    只需在web.config 中将其注册为您的 SiteMapProvider:

    <siteMap enabled ="true" defaultProvider="XmlSiteMapDefaultProvider">
      <providers>
        <add name="XmlSiteMapDefaultProvider" type="XmlSiteMapDefaultProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true" />
      </providers>
    </siteMap>
    

    【讨论】:

    • 您好,非常感谢您的回复。是的,您对以下行是正确的:IClaimsPrincipal 对象为用户提供角色,它接受您的 ClaimTypes.Role 类型的声明。您能否将带有站点地图控件的 ClaimTypes.Role 的示例代码发送给我,而不是上面的自定义 XmlSiteMapDefaultProvider 实现。
    • 上述站点地图提供程序可与标准站点地图控件一起使用。
    猜你喜欢
    • 2016-03-07
    • 2018-09-06
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多