エクスポート (0) 印刷
すべて展開
展開 最小化

方法:WIF および ACS を使用して要求対応の ASP.NET アプリケーションで役割ベースのアクセス管理 (RBAC) を実装する

発行: 2011年4月

更新日: 2014年2月

適用対象: Azure

  • Microsoft® Windows Azure™ AppFabric Access Control Service (ACS)

  • Windows® Identity Foundation (WIF)

  • ASP.NET

このトピックでは、WIF および ACS を使用して、要求対応の ASP.NET Web アプリケーションに役割ベースのアクセス管理 (RBAC) 承認を実装する方法について説明します。

  • 目的

  • 概要

  • 手順の概要

  • 手順 1 – 簡単な要求対応 ASP.NET Web アプリケーションを作成する

  • 手順 2 - ACS に役割要求を構成する

  • 手順 3 - ASP.NET Web アプリケーションに役割チェックを実装する

  • 手順 4 - カスタム ClaimsAuthenticationManager を使用して要求変換を実装する

  • 手順 5 - 作業をテストする

  • 関連項目

  • ACS を使用して役割要求を構成します。

  • ClaimsAuthenticationManager を使用して役割要求を変換します。

  • IsInRole 属性と PrincipalPermission 属性を使用して、役割ベースのアクセス管理確認を実装します。

RBAC は、アプリケーションでアクセスを制限するために広く採用されている手法です。ASP.NET Web アプリケーションでは、この手法は ASP.NET 1.0 から利用できる IsInRole メソッドや PrincipalPermission 属性または要求を使用して実装されます。確立された慣行を維持しながら、WIF や ACS などの新しいテクノロジを使用することにより、そうした承認の手法に要求を利用できます。WIF ランタイムおよび SDK は次の場所からダウンロードして入手できます。

  • 手順 1 - 要求に対応する単純な ASP.NET Web アプリケーションを作成する

  • 手順 2 - ACS に役割要求を構成する

  • 手順 3 - ASP.NET Web アプリケーションに役割チェックを実装する

  • 手順 4 - カスタム ClaimsAuthenticationManager を使用して要求変換を実装する

  • 手順 5 - 作業をテストする

この手順では、RBAC を実装する土台となる基本的な ASP.NET Web アプリケーションを作成する方法を示します。

  1. 昇格された特権を持つ管理者として Visual Studio® を実行します。これは、この方法の説明で後から WIF を使用するために必要です。

  2. 新しい空の ASP.NET Web アプリケーションを作成します。

  3. ASPX Web フォームを追加し、default.aspx などの名前を付けます。

この手順では、規則グループを使用して ACS 管理ポータルで役割要求を構成する方法を示します。完全な手順別チュートリアルについては、「方法:規則を使用してトークン変換ロジックを実装する」を参照してください。

  1. [証明書利用者アプリケーションの編集] ページで、[規則グループ] セクションまで下方向にスクロールし、目的のグループのリンクをクリックします。グループが選択されていることを確認します。

  2. [規則グループの編集] ページで、[規則] セクションまで下方向にスクロールし、[規則の追加] リンクをクリックします。

  3. [要求規則の追加] ページで、[出力要求の種類] セクションまで下方向にスクロールし、[種類の選択] をクリックして、次の要求の種類を選択します。

    http://schemas.microsoft.com/ws/2008/06/identity/claims/role
    
    
  4. [出力要求の値] セクションで、[値の入力] をクリックし、テキスト ボックスに次のテキストを値として入力します。
    user

  5. 必要に応じて、説明を追加し (推奨)、[保存] をクリックします。

これで、任意のトークンに追加できる User 役割要求が構成されました。シナリオは要件によって異なる場合があります。より複雑な規則の構成の詳細については、「方法:規則を使用してトークン変換ロジックを実装する」を参照してください。

この手順では、RBAC を実装する方法を示します。

  1. Microsoft.IdentityModel アセンブリへの参照を追加します。

  2. default.aspx.cs のコードを開きます。

  3. 次の using 宣言を追加します。

    using System.Security.Permissions;
    using System.Threading;
    using Microsoft.IdentityModel.Claims;
    using System.Security;
    
    
  4. Page_Load イベント ハンドラーに次のセキュリティ要求を追加します。この属性は、現在のユーザーが User の役割に属しているかどうかを確認します。属していない場合は、例外がスローされます。

    [PrincipalPermission(SecurityAction.Demand, Role = "User")]
    
  5. 次のコードを Page_Load イベント ハンドラーの本文に追加します。これは要求とまったく同じ処理をコードで表したものです。

    PrincipalPermission p = new PrincipalPermission(null, "User");
       p.Demand();
    
    
  6. 次のコードを Page_Load イベントの本文に追加します。前のコードと対照的に、このコードでは例外がスローされません。代わりに、IsInRole は、指定した役割が現在のユーザーに割り当てられているかどうかを示すブール値を返します。

    if (!User.IsInRole("User"))
                    throw new SecurityException("Access is denied.");
    
    
  7. 完成したコードは次のようになります。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    using System.Security.Permissions;
    using System.Threading;
    using Microsoft.IdentityModel.Claims;
    using System.Security;
    
    namespace WebIsInRoleACS
    {
        public partial class _default : System.Web.UI.Page
        {
            //THIS SHOULD THROW AN EXCEPTION
            [PrincipalPermission(SecurityAction.Demand, Role = "User")]
            protected void Page_Load(object sender, EventArgs e)
            {
    
                //THIS SHOULD THROW AN EXCEPTION
                PrincipalPermission p = new PrincipalPermission(null, "User");
                p.Demand();
    
                //THIS RETURNS BOOL
                if (!User.IsInRole("User"))
                    throw new SecurityException("Access is denied.");
            }
        }
    }
    
    

この手順は省略可能です。この手順では、「手順 2 – ACS で役割要求を構成する」で説明した ACS で実行される要求変換規則とは対照的に、ASP.NET アプリケーションのコンテキスト内で実行される WIF パイプラインの一部である ClaimsAuthenticationManager を使用して要求を変換する方法を示します。

  1. Visual Studio ソリューションにクラス ライブラリ プロジェクトを追加し、MyClaimsTransformationModule などの名前を付けます。

  2. Microsoft.IdentityModel アセンブリへの参照を追加します。

  3. System.IdentityModel アセンブリへの参照を追加します。

  4. 新しいクラスを作成し、ClaimsTransformationModule などの名前を付けます。

  5. このクラスに次の宣言を追加します。

    using Microsoft.IdentityModel.Claims;
    using System.Security.Principal;
    
    
  6. ClaimsAuthenticationManager 型からクラスを派生させます。

  7. クラスの Authenticate メソッドをオーバーライドします (ここで要求変換が実行されます)。Authenticate メソッドのコードは、次のコードを基に記述できます。

    if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated == true)
    {
        //DECIDE ON SOME CRITERIA IF CURRENT USER DESERVES THE ROLE
        //IClaimsIdentity identity = (IClaimsIdentity)incomingPrincipal.Identity;
        ((IClaimsIdentity)incomingPrincipal.Identity).Claims.Add(
            new Claim(ClaimTypes.Role, "Admin"));
    }
    return incomingPrincipal;
    
    
  8. ASP.NET アプリケーションに切り替えて、カスタム ClaimsAuthenticationManager を web.config で構成します。

      <microsoft.identityModel>
        <service>
          <claimsAuthenticationManager type="MyClaimsTransformationModule.ClaimsTransformationModule, MyClaimsTransformationModule" />
    
    
  9. 作成した新しいアセンブリをアプリケーションから検出できるようにします。最も簡単な方法は、アセンブリをアプリケーションの bin フォルダーに配置することです。

この手順では、ソリューションが機能することを検証する方法を示します。ソリューションをテストするには、F5 キーを押します。ASP.NET Web アプリケーションがデバッグ モードで実行されます (ブレークポイントを追加して、Visual Studio 内でコードの実行を確認できます)。最初に、フェデレーション用に構成された ID プロバイダーの認証ページが表示されます。認証が完了すると、元の Default.aspx ページにリダイレクトされます。例外がスローされなければ、User の役割のすべてのセキュリティ要求が満たされたことになります。

コミュニティの追加

追加
表示:
© 2014 Microsoft