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 для текущего запроса авторизации.

Возвращаемое значение

Значение 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 для доступа к удостоверению вызывающего объекта (ServiceSecurityContext). Путем возвращения объекта RequestContext из свойства RequestContext приложение может получить доступ ко всему сообщению запроса (RequestMessage). Путем возвращения объекта MessageHeaders из свойства IncomingMessageHeaders приложение может получить доступ к URL-адресу службы (To) и операции (Action). Располагая этими сведениями, приложение может принять соответствующее решение об авторизации.

Утверждения, делаемые пользователем, находятся в свойстве ClaimSet, которое возвращается свойством ClaimSets объекта AuthorizationContext. Текущий объект AuthorizationContext возвращается свойством ServiceSecurityContext класса OperationContext.

Применяется к