ServiceAuthorizationManager.CheckAccessCore(OperationContext) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Verifica a autorização para um determinado contexto de operação com base na avaliação de política padrão.
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
Parâmetros
- operationContext
- OperationContext
O OperationContext para a solicitação de autorização atual.
Retornos
true
se o acesso for concedido; caso contrário, false
. O padrão é true
.
Exemplos
O exemplo a seguir mostra uma substituição do CheckAccessCore método.
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
Para outro exemplo, consulte Como criar um Gerenciador de Autorização Personalizado para um Serviço.
Comentários
ServiceSecurityContext geralmente é o resultado da avaliação de política padrão.
Substitua esse método para fornecer decisões de autorização personalizadas.
Esse método pode ser usado para tomar decisões de autorização com base em conjuntos de declarações que são inferidos com base em tokens de entrada ou adicionados por meio de políticas de autorização externas. Ele também pode tomar decisões de autorização com base nas propriedades da mensagem de entrada: por exemplo, o cabeçalho de ação.
Nesse método, o aplicativo pode usar o operationContext
parâmetro para acessar a identidade do chamador (ServiceSecurityContext). Ao retornar o RequestContext objeto da RequestContext propriedade, o aplicativo pode acessar toda a mensagem de solicitação (RequestMessage). Ao retornar o MessageHeaders objeto da IncomingMessageHeaders propriedade, o aplicativo pode acessar a URL do serviço (To) e a operação (Action). Com essas informações, o aplicativo pode executar a decisão de autorização adequadamente.
As declarações feitas por um usuário são encontradas no ClaimSet retornado pela ClaimSets propriedade do AuthorizationContext
. A corrente AuthorizationContext
é retornada pela ServiceSecurityContext propriedade da OperationContext classe.