Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase ServiceAuthorizationManager

 

Publicado: octubre de 2016

Proporciona la comprobación de acceso de autorización para las operaciones del servicio.

Espacio de nombres:   System.ServiceModel
Ensamblado:  System.ServiceModel (en System.ServiceModel.dll)

System.Object
  System.ServiceModel.ServiceAuthorizationManager

public class ServiceAuthorizationManager

NombreDescripción
System_CAPS_pubmethodServiceAuthorizationManager()

Inicializa una nueva instancia de la clase ServiceAuthorizationManager.

NombreDescripción
System_CAPS_pubmethodCheckAccess(OperationContext)

Comprueba la autorización para el contexto de la operación determinado.

System_CAPS_pubmethodCheckAccess(OperationContext, Message)

Comprueba la autorización para el contexto de la operación determinado cuando se requiere el acceso a un mensaje.

System_CAPS_protmethodCheckAccessCore(OperationContext)

Comprueba la autorización para el contexto de la operación determinado basándose en la evaluación de la directiva predeterminada.

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object).

System_CAPS_protmethodGetAuthorizationPolicies(OperationContext)

Obtiene el conjunto de directivas que participan en la evaluación de la directiva.

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_pubmethodToString()

Devuelve una cadena que representa al objeto actual. (Heredado de Object).

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.

El método CheckAccessCore es llamado por la infraestructura Windows Communication Foundation (WCF)cada vez que se realiza un intento de obtener acceso a un recurso. El método devuelve true o false para permitir o denegar el acceso, respectivamente.

El ServiceAuthorizationManager forma parte de la WCFmodelo de identidad infraestructura. 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, vea Administración de notificaciones y autorización con el modelo de identidad.

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, consulta Cómo crear un administrador de autorización personalizado para un servicio.

Para crear las directivas de autorización personalizadas, implemente la clase IAuthorizationPolicy. Para obtener un ejemplo, consulta Cómo: Crear una directiva de autorización personalizada.

Para crear una demanda personalizada, utilice la clase Claim. Para obtener un ejemplo, consulta Cómo crear una notificación personalizada. Para comparar las notificaciones personalizadas, debe comparar notificaciones, tal y como se muestra en Cómo: Comparar notificaciones.

Para obtener más información, consulteAutorización personalizada.

Puede establecer el tipo de un administrador de autorización personalizado utilizando <serviceAuthorization> (elemento) en un archivo de configuración de la aplicación cliente.

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

.NET Framework
Disponible desde 3.0

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: