ServiceAuthorizationManager.CheckAccessCore(OperationContext) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定された操作コンテキストの承認を、既定のポリシー評価に基づいてチェックします。
protected:
virtual bool CheckAccessCore(System::ServiceModel::OperationContext ^ operationContext);
protected virtual bool CheckAccessCore (System.ServiceModel.OperationContext operationContext);
abstract member CheckAccessCore : System.ServiceModel.OperationContext -> bool
override this.CheckAccessCore : System.ServiceModel.OperationContext -> bool
Protected Overridable Function CheckAccessCore (operationContext As OperationContext) As Boolean
パラメーター
- operationContext
- OperationContext
現在の承認要求に対する OperationContext。
戻り値
アクセスが許可されている場合は true
、それ以外の場合は false
。 既定値は、true
です。
例
CheckAccessCore メソッドのオーバーライドを次の例に示します。
protected override bool CheckAccessCore(OperationContext operationContext)
{
// Extract the action URI from the OperationContext. Match this against the claims
// in the AuthorizationContext.
string action = operationContext.RequestContext.RequestMessage.Headers.Action;
// Iterate through the various claim sets in the AuthorizationContext.
foreach(ClaimSet cs in operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets)
{
// Examine only those claim sets issued by System.
if (cs.Issuer == ClaimSet.System)
{
// Iterate through claims of type "http://www.contoso.com/claims/allowedoperation".
foreach (Claim c in cs.FindClaims("http://www.contoso.com/claims/allowedoperation", Rights.PossessProperty))
{
// If the Claim resource matches the action URI then return true to allow access.
if (action == c.Resource.ToString())
return true;
}
}
}
// If this point is reached, return false to deny access.
return false;
}
Protected Overrides Function CheckAccessCore(ByVal operationContext As OperationContext) As Boolean
' Extract the action URI from the OperationContext. Match this against the claims.
' in the AuthorizationContext.
Dim action As String = operationContext.RequestContext.RequestMessage.Headers.Action
' Iterate through the various claimsets in the AuthorizationContext.
Dim cs As ClaimSet
For Each cs In operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets
' Examine only those claim sets issued by System.
If cs.Issuer Is ClaimSet.System Then
' Iterate through claims of type "http://www.contoso.com/claims/allowedoperation".
Dim c As Claim
For Each c In cs.FindClaims("http://www.contoso.com/claims/allowedoperation", _
Rights.PossessProperty)
' If the Claim resource matches the action URI then return true to allow access.
If action = c.Resource.ToString() Then
Return True
End If
Next c
End If
Next cs
' If this point is reached, return false to deny access.
Return False
End Function
別の例については、「 方法: サービスのカスタム承認マネージャーを作成する」を参照してください。
注釈
通常、ServiceSecurityContext は、既定のポリシーの評価結果です。
カスタム承認決定を行うには、このメソッドをオーバーライドします。
このメソッドを使用して、受信したトークンから推測されるクレーム セット、または外部承認ポリシーを介して追加されたクレーム セットに基づいて、承認決定を行うことができます。 承認決定は、受信メッセージのプロパティ (アクション ヘッダーなど) に基づいて行うこともできます。
このメソッドでアプリケーションは、operationContext
パラメーターを使用して呼び出し元 ID (ServiceSecurityContext) にアクセスできます。
RequestContext プロパティから RequestContext オブジェクトを返すことで、アプリケーションは要求メッセージ全体 (RequestMessage) にアクセスできます。
MessageHeaders プロパティから IncomingMessageHeaders オブジェクトを返すことで、アプリケーションは、サービス URL (To) および操作 (Action) にアクセスできます。 この情報により、アプリケーションは適宜承認決定を行うことができます。
ユーザーが行ったクレームは、ClaimSet の ClaimSets プロパティによって返される AuthorizationContext
内にあります。 現在の AuthorizationContext
は、ServiceSecurityContext クラスの OperationContext プロパティによって返されます。
適用対象
.NET