Condividi tramite


ServiceAuthorizationManager.CheckAccessCore(OperationContext) Metodo

Definizione

Verifica l'autorizzazione per il contesto dell'operazione specificato in base alla valutazione dei criteri predefinita.

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

Parametri

operationContext
OperationContext

Classe OperationContext della richiesta di autorizzazione corrente.

Restituisce

Boolean

true se l'accesso viene concesso. In caso contrario, false. Il valore predefinito è true.

Esempio

Nell'esempio seguente viene illustrato un override del metodo 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

Per un altro esempio, vedere Procedura: Creare un gestore autorizzazioni personalizzato per un servizio.

Commenti

La classe ServiceSecurityContext è generalmente il risultato della valutazione dei criteri predefinita.

Eseguire l'override di questo metodo per fornire decisioni di autorizzazione personalizzate.

Questo metodo può essere utilizzato per prendere decisioni di autorizzazione basate su set di attestazioni derivati dai token in ingresso o aggiunti attraverso criteri di autorizzazione esterni. Può inoltre essere utilizzato per decisioni basate su proprietà dei messaggi in ingresso, ad esempio sull'intestazione dell'azione.

In questo metodo, l'applicazione può utilizzare il parametro operationContext per accedere all'identità del chiamante (ServiceSecurityContext). Con la restituzione dell'oggetto RequestContext dalla proprietà RequestContext, l'applicazione può accedere all'intero messaggio di richiesta (RequestMessage). Con la restituzione dell'oggetto MessageHeaders dalla proprietà IncomingMessageHeaders, l'applicazione può accedere all'URL del servizio (To) e all'operazione (Action). Con queste informazioni, l'applicazione può prendere di conseguenza la decisione di autorizzazione.

Le attestazioni eseguite da un utente si trovano nella classe ClaimSet restituita dalla proprietà ClaimSets di AuthorizationContext. L'AuthorizationContext corrente viene restituito dalla proprietà ServiceSecurityContext della classe OperationContext.

Si applica a