ServiceAuthorizationManager.CheckAccess Metodo

Definizione

Verifica l'autorizzazione per il contesto dell'operazione specificato e il messaggio facoltativo.

Overload

CheckAccess(OperationContext)

Verifica l'autorizzazione per il contesto dell'operazione specificato.

CheckAccess(OperationContext, Message)

Verifica l'autorizzazione per il contesto dell'operazione specificato quando viene richiesto l'accesso a un messaggio.

CheckAccess(OperationContext)

Verifica l'autorizzazione per il contesto dell'operazione specificato.

C#
public virtual bool CheckAccess (System.ServiceModel.OperationContext operationContext);

Parametri

operationContext
OperationContext

Oggetto OperationContext.

Restituisce

Boolean

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

Esempio

Nel codice seguente viene illustrato come eseguire l'override di questo metodo per applicare i requisiti di controllo di accesso personalizzati.

C#
public class myServiceAuthorizationManager : ServiceAuthorizationManager
{
    // Override the CheckAccess method to enforce access control requirements.
    public override bool CheckAccess(OperationContext operationContext)
    {
        AuthorizationContext authContext =
        operationContext.ServiceSecurityContext.AuthorizationContext;
        if (authContext.ClaimSets == null) return false;
        if (authContext.ClaimSets.Count != 1) return false;
        ClaimSet myClaimSet = authContext.ClaimSets[0];
        if (!IssuedBySTS_B(myClaimSet)) return false;
        if (myClaimSet.Count != 1) return false;
        Claim myClaim = myClaimSet[0];
        if (myClaim.ClaimType ==
          "http://www.tmpuri.org:accessAuthorized")
        {
            string resource = myClaim.Resource as string;
            if (resource == null) return false;
            if (resource != "true") return false;
            return true;
        }
        else
        {
            return false;
        }
    }

    // This helper method checks whether SAML Token was issued by STS-B.
    // It compares the Thumbprint Claim of the Issuer against the
    // Certificate of STS-B.
    private bool IssuedBySTS_B(ClaimSet myClaimSet)
    {
        ClaimSet issuerClaimSet = myClaimSet.Issuer;
        if (issuerClaimSet == null) return false;
        if (issuerClaimSet.Count != 1) return false;
        Claim issuerClaim = issuerClaimSet[0];
        if (issuerClaim.ClaimType != ClaimTypes.Thumbprint)
            return false;
        if (issuerClaim.Resource == null) return false;
        byte[] claimThumbprint = (byte[])issuerClaim.Resource;
        // It is assumed that stsB_Certificate is a variable of type
        // X509Certificate2 that is initialized with the Certificate of
        // STS-B.
        X509Certificate2 stsB_Certificate = GetStsBCertificate();
        byte[] certThumbprint = stsB_Certificate.GetCertHash();
        if (claimThumbprint.Length != certThumbprint.Length)
            return false;
        for (int i = 0; i < claimThumbprint.Length; i++)
        {
            if (claimThumbprint[i] != certThumbprint[i]) return false;
        }
        return true;
    }

Commenti

In generale, le applicazioni devono eseguire l'override del metodo CheckAccessCore anziché di questo metodo.

Eseguire l'override del metodo CheckAccess se l'applicazione associa o introduce un set di criteri diverso per la classe ServiceSecurityContext risultante oppure fornire un diverso modello (concatenamento) di valutazione dei criteri.

Questo metodo è responsabile della chiamata al metodo CheckAccessCore.

Si applica a

.NET Framework 4.8 e altre versioni
Prodotto Versioni
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8

CheckAccess(OperationContext, Message)

Verifica l'autorizzazione per il contesto dell'operazione specificato quando viene richiesto l'accesso a un messaggio.

C#
public virtual bool CheckAccess (System.ServiceModel.OperationContext operationContext, ref System.ServiceModel.Channels.Message message);

Parametri

operationContext
OperationContext

Oggetto OperationContext.

message
Message

Classe Message da esaminare per determinare l'autorizzazione.

Restituisce

Boolean

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

Esempio

Nel codice seguente viene illustrato come eseguire l'override di questo metodo per applicare i requisiti di controllo di accesso personalizzati che richiedono l'accesso al corpo del messaggio.

C#
public class myService_M_AuthorizationManager : ServiceAuthorizationManager
{
    // set max size for message
    int someMaxSize = 16000;
    protected override bool CheckAccessCore(OperationContext operationContext, ref Message message)
    {
        bool accessAllowed = false;
        MessageBuffer requestBuffer = message.CreateBufferedCopy(someMaxSize);

        // do access checks using the message parameter value and set accessAllowed appropriately
        if (accessAllowed)
        {
            // replace incoming message with fresh copy since accessing the message consumes it
            message = requestBuffer.CreateMessage();
        }
        return accessAllowed;
    }
}

Commenti

In generale, le applicazioni devono eseguire l'override del metodo CheckAccessCore anziché di questo metodo, che deve essere utilizzato solo se la decisione di autorizzazione dipende dal corpo del messaggio. A causa di problemi riguardanti le prestazioni, è consigliabile ridisegnare l'applicazione, se possibile, in modo tale che per la decisione di autorizzazione non sia necessario l'accesso al corpo del messaggio.

Eseguire l'override di questo metodo se l'applicazione associa o introduce un set di criteri diverso per le classi ServiceSecurityContext e Message risultanti oppure fornire un diverso modello (concatenamento) di valutazione dei criteri.

Questo metodo è responsabile della chiamata al metodo CheckAccessCore.

Si applica a

.NET Framework 4.8 e altre versioni
Prodotto Versioni
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8