ServiceAuthorizationManager.CheckAccess Méthode

Définition

Vérifie l'autorisation pour le contexte d'opération et le message facultatif donnés.

Surcharges

CheckAccess(OperationContext)

Vérifie l'autorisation pour le contexte d'opération donné.

CheckAccess(OperationContext, Message)

Vérifie l'autorisation pour le contexte d'opération donné lorsque l'accès à un message est requis.

CheckAccess(OperationContext)

Vérifie l'autorisation pour le contexte d'opération donné.

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

Paramètres

operationContext
OperationContext

L’OperationContextopérateur

Retours

Boolean

true si l'accès est accordé ; sinon false. La valeur par défaut est true.

Exemples

Le code suivant montre comment substituer cette méthode afin d’appliquer des exigences de contrôle d’accès personnalisées.

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;
    }

Remarques

En général, les applications doivent substituer CheckAccessCore au lieu de cette méthode.

Substituez CheckAccess si l'application associe ou introduit un jeu différent de stratégies pour le ServiceSecurityContext résultant ou fournit un modèle d'évaluation (chaînage) de la stratégie différent.

Cette méthode est chargée d'appeler CheckAccessCore.

S’applique à

.NET Framework 4.8 et autres versions
Produit Versions
.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)

Vérifie l'autorisation pour le contexte d'opération donné lorsque l'accès à un message est requis.

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

Paramètres

operationContext
OperationContext

L’OperationContextopérateur

message
Message

Message à examiner pour déterminer l'autorisation.

Retours

Boolean

true si l'accès est accordé ; sinon false. La valeur par défaut est true.

Exemples

Le code suivant montre comment substituer cette méthode afin d’appliquer des exigences de contrôle d’accès personnalisées qui requièrent l’accès au corps du message.

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;
    }
}

Remarques

En général, les applications doivent substituer CheckAccessCore au lieu de cette méthode, qui ne doit être utilisée que si la décision d'autorisation dépend du corps du message. En raison des problèmes de performances, essayez de reconcevoir si possible votre application afin que la décision d'autorisation ne nécessite pas l'accès au corps du message.

Substituez cette méthode si l'application associe ou introduit un jeu différent de stratégies pour les ServiceSecurityContext et Message résultants ou fournit un modèle d'évaluation (chaînage) de la stratégie différent.

Cette méthode est chargée d'appeler CheckAccessCore.

S’applique à

.NET Framework 4.8 et autres versions
Produit Versions
.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