ServiceAuthorizationManager Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Proporciona la comprobación de acceso de autorización para las operaciones del servicio.
public ref class ServiceAuthorizationManager
public class ServiceAuthorizationManager
type ServiceAuthorizationManager = class
Public Class ServiceAuthorizationManager
- Herencia
-
ServiceAuthorizationManager
Ejemplos
En el ejemplo de código siguiente se muestra una clase denominada MyServiceAuthorizationManager
que hereda de ServiceAuthorizationManager e invalida el método CheckAccessCore.
public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
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;
}
}
Public Class MyServiceAuthorizationManager
Inherits ServiceAuthorizationManager
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
End Class
Comentarios
Esta clase es responsable de evaluar todas las directivas (reglas que definen lo que un usuario puede hacer), comparar las directivas con las notificaciones realizadas por un cliente, establecer el AuthorizationContext resultante en ServiceSecurityContext y proporcionar la decisión de autorización sobre si se debe permitir o denegar el acceso a una operación del servicio determinada para el autor de una llamada.
La CheckAccessCore infraestructura de Windows Communication Foundation (WCF) llama al método cada vez que se realiza un intento de acceder a un recurso. El método devuelve true
o false
para permitir o denegar el acceso, respectivamente.
forma ServiceAuthorizationManager parte de la infraestructura delmodelo de identidad de WCF. El Modelo de identidad le permite crear directivas de autorización personalizadas y esquemas de autorización personalizados. Para obtener más información sobre cómo funciona el modelo de identidad, consulte Administración de notificaciones y autorización con el modelo de identidad.
Autorización personalizada
Esta clase no realiza ninguna autorización y permite que los usuarios tengan acceso a todas las operaciones del servicio. Para proporcionar una autorización más restrictiva, debe crear un administrador de autorización personalizado que compruebe las directivas personalizadas. Para ello, herede de esta clase e invalide el método CheckAccessCore. Especifique la instancia de la clase derivada a través de la propiedad ServiceAuthorizationManager.
En CheckAccessCore, la aplicación puede utilizar el objeto OperationContext para tener acceso a la identidad del autor de la llamada (ServiceSecurityContext).
Obteniendo la propiedad IncomingMessageHeaders, que devuelve un objeto MessageHeaders, la aplicación puede tener acceso al servicio (To) y a la operación (Action).
Obteniendo la propiedad RequestContext, que devuelve un objeto RequestContext, la aplicación puede obtener acceso el mensaje de solicitud completo (RequestMessage) y tomar la decisión de la autorización en consecuencia.
Para obtener un ejemplo, vea How to: Create a Custom Authorization Manager for a Service.
Para crear las directivas de autorización personalizadas, implemente la clase IAuthorizationPolicy. Para obtener un ejemplo, vea Cómo: Crear una directiva de autorización personalizada.
Para crear una demanda personalizada, utilice la clase Claim. Para obtener un ejemplo, vea Cómo: Crear una notificación personalizada. Para comparar notificaciones personalizadas, debe comparar notificaciones, como se muestra en Cómo: Comparar notificaciones.
Para obtener más información, consulte Autorización personalizada.
Puede establecer el tipo de un administrador de autorización personalizado mediante serviceAuthorization<> en un archivo de configuración de aplicación cliente.
Constructores
ServiceAuthorizationManager() |
Inicializa una nueva instancia de la clase ServiceAuthorizationManager. |
Métodos
CheckAccess(OperationContext) |
Comprueba la autorización para el contexto de la operación determinado. |
CheckAccess(OperationContext, Message) |
Comprueba la autorización para el contexto de la operación determinado cuando se requiere el acceso a un mensaje. |
CheckAccessCore(OperationContext) |
Comprueba la autorización para el contexto de la operación determinado basándose en la evaluación de la directiva predeterminada. |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetAuthorizationPolicies(OperationContext) |
Obtiene el conjunto de directivas que participan en la evaluación de la directiva. |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |