方法 : カスタム承認ポリシーを作成する

Windows Communication Foundation (WCF) 内の識別モデル インフラストラクチャでは、クレーム ベースの承認モデルがサポートされます。クレームは、トークンから抽出され、状況に応じてカスタム承認ポリシーによって処理されてから、承認決定を行う際に確認できる AuthorizationContext に格納されます。カスタム ポリシーを使用して、入力トークンからのクレームを、アプリケーションが要求するクレームに変換することができます。この方法では、WCF がサポートするトークンの種類から抽出される個々のクレームの詳細から、アプリケーション レイヤを分離できます。このトピックでは、カスタム承認ポリシーの実装方法と、サービスで使用するポリシーのコレクションにカスタム承認ポリシーを追加する方法について説明します。

カスタム承認ポリシーを実装するには

  1. IAuthorizationPolicy から派生する新しいクラスを定義します。

  2. クラスのコンストラクタ内で一意の文字列を生成し、プロパティがアクセスされたときにその文字列を返すことによって、読み取り専用の Id プロパティを実装します。

  3. ポリシーの発行者を表す ClaimSet を返すことによって、読み取り専用の Issuer プロパティを実装します。これは、アプリケーションを表す ClaimSet、または組み込み ClaimSet (静的な System プロパティから返される ClaimSet など) にすることができます。

  4. 次の手順に従って、Evaluate メソッドを実装します。

Evaluate メソッドを実装するには

  1. このメソッドには、EvaluationContext クラスのインスタンスとオブジェクト参照の 2 つのパラメータが渡されます。

  2. カスタム承認ポリシーで、EvaluationContext の現在の内容とは無関係に ClaimSet インスタンスを追加する場合は、AddClaimSet メソッドを呼び出して各 ClaimSet を追加し、Evaluate メソッドから true を返します。true を返すことは、承認インフラストラクチャに対して、承認ポリシーがその処理を完了したため、もう一度呼び出す必要がないことを知らせることになります。

  3. カスタム承認ポリシーで EvaluationContext 内に特定のクレームが既に存在するときにのみクレーム セットを追加する場合は、ClaimSets プロパティから返された ClaimSet インスタンスを調べて、該当するクレームを見つけます。クレームが見つかった場合は、AddClaimSet メソッドを呼び出して新しいクレーム セットを追加します。追加するクレーム セットがない場合は、true を返し、承認インフラストラクチャに承認ポリシーがその処理を完了したことを知らせます。クレームが存在しない場合は false を返し、他の承認ポリシーで EvaluationContext にさらにクレーム セットを追加する場合は、もう一度承認ポリシーを呼び出す必要があることを知らせます。

  4. より複雑な処理シナリオでは、Evaluate メソッドの 2 番目のパラメータを使用して、特定の評価のために Evaluate メソッドに対するその後の呼び出し時に承認インフラストラクチャから返される状態変数を格納します。

構成を使用してカスタム承認ポリシーを指定するには

  1. serviceAuthorization 要素の authorizationPolicies 要素にある add 要素の policyType 属性でカスタム承認ポリシーの種類を指定します。

    <configuration>
     <system.serviceModel>
      <behaviors>
        <serviceAuthorization serviceAuthorizationManagerType=
                  "Samples.MyServiceAuthorizationManager" >
          <authorizationPolicies>       
            <add policyType="Samples.MyAuthorizationPolicy"
          </authorizationPolicies>
        </serviceAuthorization>
      </behaviors>
     </system.serviceModel>
    </configuration>
    

コードを使用してカスタム承認ポリシーを指定するには

  1. IAuthorizationPolicyList を作成します。

  2. カスタム承認ポリシーのインスタンスを作成します。

  3. リストに承認ポリシー インスタンスを追加します。

  4. カスタム承認ポリシーごとに手順 2. と 3. を繰り返します。

  5. ExternalAuthorizationPolicies プロパティにリストの読み取り専用バージョンを割り当てます。

完成した IAuthorizationPolicy の実装例を次に示します。

関連項目

リファレンス

ServiceAuthorizationManager

その他の技術情報

How To: Compare Claims
How To: Create a Custom AuthorizationManager on a Service
Authorization Policy Sample