1

現在、ADFS 認証メカニズムを使用してユーザーを認証しています。その場合、フォーム認証ではなく authenticationmode を None に設定しています。ユーザーが正常にログインした後、クレーム オブジェクトは、ログインしたユーザーに関連付けられたロール データを提供します。その場合、サイトマップのロール属性がクレーム オブジェクトからロールを取得できるようになります。securityTrimmingEnabled プロパティの使用方法を教えてください。

RoleProvider クラスを継承するカスタム クラス ADFSRoleProvider.cs を使用し、メソッド GetRolesForUser メソッドをオーバーライドしましたが、設定しない限りメソッドは呼び出されません。

<authentication mode="Forms"/>

これはまた、siteMapNode ノードで言及されているロール属性と対​​話することもできません。

主な問題は、ユーザーが ADFS 認証メカニズムを使用して正常にログインした後、サイトマップ ロール属性が、loggedIn ユーザーのロールをどのように認識するかということです。

上記の問題に関するコードサンプルとヘルプを提供してください。

4

1 に答える 1

5

カスタム ロール プロバイダーが必要であると確信していますか? オブジェクトはユーザーにロールを提供し、IClaimsPrincipaltype のクレームを受け取ります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.configSiteMapProvider として登録するだけです。

<siteMap enabled ="true" defaultProvider="XmlSiteMapDefaultProvider">
  <providers>
    <add name="XmlSiteMapDefaultProvider" type="XmlSiteMapDefaultProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true" />
  </providers>
</siteMap>
于 2011-11-18T21:58:03.000 に答える