다음을 통해 공유


ServiceAuthorizationManager.CheckAccessCore(OperationContext) 메서드

정의

기본 정책 평가에 따라 해당 작업 컨텍스트에 대한 권한 부여를 확인합니다.

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입니다.

반환

Boolean

액세스 권한이 부여되면 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)에 액세스할 수 있습니다. 애플리케이션은 이 정보를 사용하여 적합한 권한 부여 결정을 내릴 수 있습니다.

사용자의 클레임은 ClaimSetClaimSets 속성에 의해 반환되는 AuthorizationContext에 있습니다. 현재 AuthorizationContextServiceSecurityContext 클래스의 OperationContext 속성에 의해 반환됩니다.

적용 대상