ServiceAuthorizationManager Clase

Definición

Proporciona la comprobación de acceso de autorización para las operaciones del servicio.Provides authorization access checking for service operations.

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.The following example shows a class named MyServiceAuthorizationManager that inherits from the ServiceAuthorizationManager and overrides the CheckAccessCore method.

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.This class is responsible for evaluating all policies (rules that define what a user is allowed to do), comparing the policies to claims made by a client, setting the resulting AuthorizationContext to the ServiceSecurityContext, and providing the authorization decision whether to allow or deny access for a given service operation for a caller.

La CheckAccessCore infraestructura de Windows Communication Foundation (WCF) llama al método cada vez que se realiza un intento de obtener acceso a un recurso.The CheckAccessCore method is called by the Windows Communication Foundation (WCF) infrastructure each time an attempt to access a resource is made. El método devuelve true o false para permitir o denegar el acceso, respectivamente.The method returns true or false to allow or deny access, respectively.

La forma ServiceAuthorizationManager parte de la infraestructura delmodelo de identidad de WCF.The ServiceAuthorizationManager is part of the WCFIdentity Model infrastructure. El Modelo de identidad le permite crear directivas de autorización personalizadas y esquemas de autorización personalizados.The Identity Model enables you to create custom authorization policies and custom authorization schemes. Para obtener más información sobre cómo funciona el modelo de identidad, vea Administración de notificaciones y autorización con el modelo de identidad.For more information about how the Identity Model works, see Managing Claims and Authorization with the Identity Model.

Autorización personalizadaCustom Authorization

Esta clase no realiza ninguna autorización y permite que los usuarios tengan acceso a todas las operaciones del servicio.This class does not perform any authorization and allows users to access all service operations. Para proporcionar una autorización más restrictiva, debe crear un administrador de autorización personalizado que compruebe las directivas personalizadas.To provide more restrictive authorization, you must create a custom authorization manager that checks custom policies. Para ello, herede de esta clase e invalide el método CheckAccessCore.To do this, inherit from this class and override the CheckAccessCore method. Especifique la instancia de la clase derivada a través de la propiedad ServiceAuthorizationManager.Specify the instance of the derived class through the ServiceAuthorizationManager property.

En CheckAccessCore, la aplicación puede utilizar el objeto OperationContext para tener acceso a la identidad del autor de la llamada (ServiceSecurityContext).In CheckAccessCore, the application can use the OperationContext object to access the caller identity (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).By getting the IncomingMessageHeaders property, which returns a MessageHeaders object, the application can access the service (To), and the operation (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.By getting the RequestContext property, which returns a RequestContext object, the application can access the entire request message (RequestMessage) and perform the authorization decision accordingly.

Para obtener un ejemplo, consulte Cómo: crear un administrador de autorización personalizado para un servicio.For an example, see How to: Create a Custom Authorization Manager for a Service.

Para crear las directivas de autorización personalizadas, implemente la clase IAuthorizationPolicy.To create custom authorization policies, implement the IAuthorizationPolicy class. Para obtener un ejemplo, consulte Cómo: crear una directiva de autorización personalizada.For an example, see How to: Create a Custom Authorization Policy.

Para crear una demanda personalizada, utilice la clase Claim.To create a custom claim, use the Claim class. Para obtener un ejemplo, consulte Cómo: crear una demanda personalizada.For an example, see How to: Create a Custom Claim. Para comparar las notificaciones personalizadas, debe comparar las notificaciones, tal y como se muestra en Cómo: comparar notificaciones.To compare custom claims, you must compare claims, as shown in How to: Compare Claims.

Para obtener más información, vea autorización personalizada.For more information, see Custom Authorization.

Puede establecer el tipo de un administrador de autorización personalizado mediante < serviceAuthorization > en un archivo de configuración de la aplicación cliente.You can set the type of a custom authorization manager using the <serviceAuthorization> in a client application configuration file.

Constructores

ServiceAuthorizationManager()

Inicializa una nueva instancia de la clase ServiceAuthorizationManager.Initializes a new instance of the ServiceAuthorizationManager class.

Métodos

CheckAccess(OperationContext)

Comprueba la autorización para el contexto de la operación determinado.Checks authorization for the given operation context.

CheckAccess(OperationContext, Message)

Comprueba la autorización para el contexto de la operación determinado cuando se requiere el acceso a un mensaje.Checks authorization for the given operation context when access to a message is required.

CheckAccessCore(OperationContext)

Comprueba la autorización para el contexto de la operación determinado basándose en la evaluación de la directiva predeterminada.Checks authorization for the given operation context based on default policy evaluation.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.Determines whether the specified object is equal to the current object.

(Heredado de Object)
GetAuthorizationPolicies(OperationContext)

Obtiene el conjunto de directivas que participan en la evaluación de la directiva.Gets the set of policies that participate in policy evaluation.

GetHashCode()

Sirve como la función hash predeterminada.Serves as the default hash function.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.Creates a shallow copy of the current Object.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

(Heredado de Object)

Se aplica a

Consulte también