ClaimsAuthenticationManager、ClaimsAuthorizationManager、および OriginalIssuer
ClaimsAuthenticationManager
ClaimsAuthenticationManager を使用すると、受信トークンから抽出された要求が RP アプリケーションに届く前に、要求の変換処理 (追加、変更、削除など) を実行することができます。 これが要求を認証する唯一の機会となります。 ここで、ASP.NET と WCF アプリケーション間で生じる "この発行者を信頼してこれらの要求を実行しても大丈夫か" という疑問を解消することができます。
入力方向の要求をインターセプトするには、ClaimsAuthenticationManager から派生した、Authenticate メソッドのみを実装したクラスを作成します。 トークンから抽出された要求が RP アプリケーションに届く直前に、WIF はこのメソッドを呼び出し、受信トークンから抽出された要求を含んだ ClaimsIdentityCollection を渡します。 このコレクションに変更を加えた結果を、メソッドの戻り値として返します。 RP アプリケーションは、この変更後の要求のコレクションを受け取ることになります。
また、ClaimsAuthenticationManager を使用するには、それを RP のアプリケーション構成ファイルに追加するか、ServiceConfiguration オブジェクトの ClaimsAuthenticationManager に設定する必要があります。 ServiceConfiguration オブジェクトの詳細については、「構成」を参照してください。
ClaimsAuthorizationManager
ClaimsAuthorizationManager は、受信要求が RP アプリケーションに届く前に、その要求を承認または拒否できる唯一の機会を提供します。 つまり、"特定のリソースに対する特定のアクションの実行を要求元に許可するかどうか" を問う場です。
受信要求をインターセプトするには、ClaimsAuthorizationManager から派生した、CheckAccess メソッドのみを実装したクラスを作成します。 AuthorizationContext パラメーターは、次のメンバーを持ちます。
Action
: アクションを表す Claim のコレクション。Principal
: 要求元の IClaimsPrincipal。Resource
: リソースを表す Claim のコレクション。
AuthorizationContext.Action
は、ClaimsPrincipalPermission.SecurityAction
ではなく、ClaimsPrincipalPermission.Operation
と対応している点に注意してください。AuthorizationContext.Resource
は、ClaimsPrincipalPermission.Resource
と対応します。
また、ClaimsAuthorizationManager を使用するには、それを RP のアプリケーション構成ファイルに追加するか、ServiceConfiguration オブジェクトの ClaimsAuthorizationManager に設定する必要があります。 ServiceConfiguration オブジェクトの詳細については、「構成」を参照してください。
WCF サービス エンドポイントでは、ClaimsAuthorizationManager に渡されるリソースは通常、エンドポイント URI です。 このことは次のエンドポイントに該当します。
WCF サービス。
POST メソッドで呼び出される REST サービス。
POST メソッドで呼び出される ClaimsAuthorizationModule を持った ASP.NET アプリケーション。
次のエンドポイントには該当しません。
GET メソッドで呼び出される REST サービス。
GET メソッドで呼び出される ClaimsAuthorizationModule を持った ASP.NET アプリケーション。
URI は要求文字列のクエリ パラメーターによってリクエストごとに変化するため、エンドポイント URI に基づいて要求を承認または拒否する場合、厳密な文字列比較は実行できません。
承認の判断を非同期コールバック メソッドで行うことも避けてください。これらのメソッドでは、ClaimsAuthorizationManager が呼び出されません。 承認の判断を Beginxxx メソッドで行うことはできますが、非同期コールバックや Endxxx メソッドで行うことはできません。
OriginalIssuer
証明書利用者アプリケーション (RP) が、要求を最初に発行した STS に基づいてポリシー上の判断を下す必要がある場合は、OriginalIssuer プロパティを使用します。 このプロパティは、要求を含んだトークンの発行元のセキュリティ トークン サービス (STS) によって設定されます。
たとえば、RP がその証明書利用者 STS (RP-STS) からトークンを受け取るとします。 RP-STS 自体は複数の ID プロバイダー STS (IP-STS) を信頼しています。 RP がその RP-STS を信頼しているということは、それらの IP-STS も信頼していることになります。 ただし、RP は、トークンに含まれている要求が直接その RP-STS (またはそのいずれかの IP-STS) によって発行されたものであるかどうかに基づいて、ポリシー上の判断を下す必要があります。 この判断を可能にするのが、OriginalIssuer プロパティです。
OriginalIssuer プロパティの値は、暗号的に検証可能な値ではありません。 したがって、ポリシー上の判断を行う目的で使用することはできますが、セキュリティ上の判断には使用できません。
注意
委任チェーン内の STS は、受け取ったすべての要求の OriginalIssuer の値を保持しながら、これらの要求を含んだ別のトークンを発行する必要があります。