ServiceAuthorizationManager.CheckAccessCore(OperationContext) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Vérifie l'autorisation pour le contexte d'opération donné selon l'évaluation de la stratégie par défaut.
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
Paramètres
- operationContext
- OperationContext
OperationContext de la demande d'autorisation actuelle.
Retours
true
si l'accès est accordé ; sinon false
. La valeur par défaut est true
.
Exemples
L'exemple suivant illustre une substitution de la méthode 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
Pour obtenir un autre exemple, consultez Guide pratique pour créer un gestionnaire d’autorisations personnalisées pour un service.
Remarques
ServiceSecurityContext est généralement le résultat de l'évaluation de la stratégie par défaut.
Substituez cette méthode pour proposer des décisions d'autorisation personnalisées.
Cette méthode peut être utilisée pour prendre des décisions d'autorisation en fonction d'ensembles de revendications déduits sur la base de jetons entrants ou ajoutés par le biais de stratégies d'autorisation externes. Elle peut également prendre des décisions d'autorisation d'après les propriétés du message entrant : par exemple, l'en-tête de l'action.
Dans cette méthode, l'application peut utiliser le paramètre operationContext
pour accéder à l'identité de l'appelant (ServiceSecurityContext). En retournant l'objet RequestContext à partir de la propriété RequestContext, l'application peut accéder à l'intégralité du message de demande (RequestMessage). En retournant l'objet MessageHeaders à partir de la propriété IncomingMessageHeaders, l'application peut accéder à l'URL de service (To) et à l'opération (Action). Ces informations permettent à l'application de prendre la décision d'autorisation.
Les revendications d'un utilisateur figurent dans l'ClaimSet retourné par la propriété ClaimSets du AuthorizationContext
. Le AuthorizationContext
est retourné par la propriété ServiceSecurityContext de la classe OperationContext.