ClaimsPrincipalPermission Class

Definition

Representa un permiso que usa una implementación de ClaimsAuthorizationManager para determinar si se debe conceder acceso a un recurso a la entidad de seguridad activa.Represents a permission that uses a ClaimsAuthorizationManager implementation to determine if access to a resource should be granted to the active principal. No se puede heredar esta clase.This class cannot be inherited.

public ref class ClaimsPrincipalPermission sealed : System::Security::IPermission, System::Security::Permissions::IUnrestrictedPermission
[System.Serializable]
public sealed class ClaimsPrincipalPermission : System.Security.IPermission, System.Security.Permissions.IUnrestrictedPermission
type ClaimsPrincipalPermission = class
    interface IPermission
    interface ISecurityEncodable
    interface IUnrestrictedPermission
Public NotInheritable Class ClaimsPrincipalPermission
Implements IPermission, IUnrestrictedPermission
Inheritance
ClaimsPrincipalPermission
Attributes
Implements

Examples

En el ejemplo siguiente se muestra cómo proteger un recurso mediante el método Demand, el método CheckAccess o una declaración ClaimsPrincipalPermissionAttribute.The following example shows how to protect a resource by using the Demand method, the CheckAccess method, or a ClaimsPrincipalPermissionAttribute declaration. En cada caso, se invoca el ClaimsAuthorizationManager configurado para evaluar la entidad de seguridad actual en el recurso y la acción especificados.In each case, the configured ClaimsAuthorizationManager is invoked to evaluate the current principal against the specified resource and action. Si la entidad de seguridad actual no está autorizada para la acción especificada en el recurso especificado, se produce una SecurityException; de lo contrario, la ejecución continúa.If the current principal is not authorized for the specified action on the specified resource, a SecurityException is thrown; otherwise, execution proceeds.

using System;
using System.Security.Permissions;
using System.Security.Principal;
using System.Threading;
using System.Security.Claims;
using System.IdentityModel.Services;

namespace ClaimsBasedAuthorization
{
    /// <summary>
    /// Program illustrates using Claims-based authorization
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            //
            // Method 1. Simple access check using static method. 
            // Expect this to be most common method.
            //
            ClaimsPrincipalPermission.CheckAccess("resource", "action");

            //
            // Method 2. Programmatic check using the permission class
            // Follows model found at http://msdn.microsoft.com/library/system.security.permissions.principalpermission.aspx
            //
            ClaimsPrincipalPermission cpp = new ClaimsPrincipalPermission("resource", "action");
            cpp.Demand();

            //
            // Method 3. Access check interacting directly with the authorization manager.
            //            
            ClaimsAuthorizationManager am = new ClaimsAuthorizationManager();
            am.CheckAccess(new AuthorizationContext((ClaimsPrincipal)Thread.CurrentPrincipal, "resource", "action"));

            //
            // Method 4. Call a method that is protected using the permission attribute class
            //
            ProtectedMethod();

            Console.WriteLine("Press [Enter] to continue.");
            Console.ReadLine();
        }

        //
        // Declarative access check using the permission class. The caller must satisfy both demands.
        //
        [ClaimsPrincipalPermission(SecurityAction.Demand, Resource = "resource", Operation = "action")]
        [ClaimsPrincipalPermission(SecurityAction.Demand, Resource = "resource1", Operation = "action1")]
        static void ProtectedMethod()
        {
        }
    }
}

El siguiente XML muestra la configuración mínima necesaria para usar un administrador de autorización de notificaciones personalizado con la clase ClaimsPrincipalPermission.The following XML shows the minimum configuration required to use a custom claims authorization manager with the ClaimsPrincipalPermission class. Debe, como mínimo, declarar las secciones system.identityModel y system.identityModel.services del elemento <configSection> y, a continuación, especificar el administrador de autorización en un elemento <claimsAuthorizationManager> en la configuración de identidad predeterminada.You must, at a minimum, declare both the system.identityModel and the system.identityModel.services sections in the <configSection> element and then specify your authorization manager in a <claimsAuthorizationManager> element under the default identity configuration. Esto garantizará que se haga referencia al administrador de autorización desde la configuración de Federación predeterminada.This will ensure that your authorization manager is referenced from the default federation configuration. También puede especificar el nombre de la configuración de identidad con la que se especifica el administrador de autorización en el atributo identityConfigurationName del elemento <federationConfiguration> .Alternatively, you can specify the name of the identity configuration under which your authorization manager is specified in the identityConfigurationName attribute of the <federationConfiguration> element.

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
  <configSections>  
    <!-- WIF configuration sections -->  
    <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>  
    <section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>  
  </configSections>  
  
  <startup>  
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />  
  </startup>  
  
  <system.identityModel>  
    <identityConfiguration>  
      <claimsAuthorizationManager type ="MyClaimsAuthorizationManager.MyClaimsAuthorizationManager, MyClaimsAuthorizationManager"/>  
    </identityConfiguration>  
  </system.identityModel>  
  
</configuration>  

Remarks

La clase ClaimsPrincipalPermission proporciona la capacidad de realizar comprobaciones de acceso imperativa mediante el ClaimsAuthorizationManager que está configurado para una aplicación.The ClaimsPrincipalPermission class provides the capability to perform imperative access checks by using the ClaimsAuthorizationManager that is configured for an application. Al invocar el método Demand o el método CheckAccess estático, puede proporcionar protección a los recursos desde dentro de la ruta de acceso de ejecución del código de acuerdo con la Directiva de autorización definida para el administrador de autenticación de notificaciones.By invoking the Demand method or the static CheckAccess method, you can provide protection to resources from within the execution path of your code according to the authorization policy defined for your claims authentication manager. Las comprobaciones de acceso declarativas se pueden realizar mediante la clase ClaimsPrincipalPermissionAttribute.Declarative access checks can be performed by using the ClaimsPrincipalPermissionAttribute class.

Important

La clase ClaimsPrincipalPermission utiliza el administrador de autorización de notificaciones configurado por el IdentityConfiguration que se establece en la propiedad FederatedAuthentication.FederationConfiguration.The ClaimsPrincipalPermission class uses the claims authorization manager configured by the IdentityConfiguration that is set under the FederatedAuthentication.FederationConfiguration property. Esto es cierto en todos los casos, incluso en escenarios donde no se utiliza WS-Federation. por ejemplo, aplicaciones web activas (WCF) y aplicaciones de consola.This is true in all cases, even in scenarios where WS-Federation is not used; for example, active (WCF) Web applications and Console applications. Puede especificar el administrador de autorización de notificaciones en la configuración o mediante programación.You can specify the claims authorization manager either in configuration or programmatically. Para especificar el administrador de autorización de notificaciones en un archivo de configuración, establezca el elemento <claimsAuthorizationManager> en un elemento <identityConfiguration> y asegúrese de que la configuración de identidad a la que se hace referencia mediante el elemento<de>federationConfiguration que carga el Runtime (por ejemplo, estableciendo el atributo identityConfigurationName).To specify the claims authorization manager in a configuration file, set the <claimsAuthorizationManager> element under an <identityConfiguration> element and ensure that this identity configuration is referenced by the <federationConfiguration> element that is loaded by the runtime (for example, by setting the identityConfigurationName attribute). Para establecer el administrador de autorización de notificaciones mediante programación, proporcione un controlador para el evento FederatedAuthentication.FederationConfigurationCreated.To set the claims authorization manager programmatically, provide a handler for the FederatedAuthentication.FederationConfigurationCreated event.

En un nivel, la funcionalidad proporcionada por ClaimsPrincipalPermission es similar a las comprobaciones de acceso basadas en rol (RBAC) proporcionadas a través de la clase PrincipalPermission. sin embargo, la clase ClaimsAuthorizationManager realiza comprobaciones basadas en las notificaciones presentadas por la entidad de seguridad activa.On one level, the functionality provided by ClaimsPrincipalPermission is similar to the role-based access checks (RBAC) provided through the PrincipalPermission class; however, the ClaimsAuthorizationManager class performs checks based on the claims presented by the active principal. Esto permite mucho más granularidad que el que está disponible a través de RBAC puro, donde muchos permisos se suelen recopilar en un solo rol.This enables far more granularity than is available through pure RBAC, where many permissions are typically collected under a single role. Quizás, lo que es más importante, la autorización basada en notificaciones permite una mejor separación de la lógica de negocios y de la Directiva de autorización, ya que se puede solicitar permiso para una acción específica en un recurso en el código y la Directiva de back-end para configurar las notificaciones que la entidad de presentación debe poseer para satisfacer la demanda.Perhaps, more importantly, claims-based authorization enables better separation of business logic and authorization policy because permission can be demanded for a specific action on a resource in code and back-end policy can be used to configure which claims the presenting entity must possess in order to satisfy the demand. Como RBAC, ClaimsPrincipalPermission realiza una comprobación de acceso basada en el usuario, es decir, a diferencia de la seguridad de acceso del código implementada por clases que derivan de la clase CodeAccessPermission y usan un recorrido de pila para asegurarse de que todos los llamadores del código reciben un permiso ClaimsPrincipalPermission realiza su comprobación solo en la entidad de seguridad actual.Like RBAC, ClaimsPrincipalPermission performs a user-based access check, that is, unlike code access security implemented by classes that derive from the CodeAccessPermission class and use a stack walk to ensure that all callers of the code have been granted a permission, ClaimsPrincipalPermission performs its check only on the current principal.

El método estático CheckAccess comprueba el acceso para una acción especificada en un recurso especificado.The static CheckAccess method checks access for a specified action on a specified resource. El recurso y la acción son ambas cadenas y suelen ser URI.The resource and action are both strings and are typically URIs. También puede inicializar una instancia de ClaimsPrincipalPermission con una acción y un recurso y llamar al método Demand.You can also initialize an instance of ClaimsPrincipalPermission with an action and a resource and call the Demand method. Aunque el constructor solo toma un único recurso y una acción, los objetos ClaimsPrincipalPermission se pueden combinar a través de los métodos Union y Intersect.Although the constructor only takes a single resource and action, ClaimsPrincipalPermission objects can be combined through the Union and Intersect methods. Un permiso creado mediante estos métodos puede contener varios pares de recurso-acción.A permission created by using these methods may contain multiple resource-action pairs.

Ambos métodos determinan el acceso mediante la invocación del método ClaimsAuthorizationManager.CheckAccess del administrador de autorización de notificaciones configurado con un AuthorizationContext compuesto por la entidad de seguridad activa (Thread.CurrentPrincipal), el recurso y la acción.Both methods determine access by invoking the ClaimsAuthorizationManager.CheckAccess method of the configured claims authorization manager with an AuthorizationContext composed of the active principal (Thread.CurrentPrincipal), the resource, and the action. Inician una SecurityException si la entidad de seguridad actual no está autorizada para realizar la acción en el recurso; de lo contrario, la ejecución continúa.They throw a SecurityException if the current principal is not authorized to perform the action on the resource; otherwise, execution proceeds.

En el caso de una ClaimsPrincipalPermission que contiene varios pares de recurso-acción, se invoca el método de ClaimsAuthorizationManager.CheckAccess para cada uno de los pares de acción-recurso contenidos en el permiso.In the case of a ClaimsPrincipalPermission that contains multiple resource-action pairs, the ClaimsAuthorizationManager.CheckAccess method is invoked for each of the resource-action pairs contained in the permission. Para que la llamada a Demand sea correcta, la entidad de seguridad activa debe estar autorizada para todos los pares de recurso-acción incluidos en el permiso.For the call to Demand to succeed, the active principal must be authorized for all of the resource-action pairs contained in the permission.

Constructors

ClaimsPrincipalPermission(String, String)

Crea una nueva instancia de la clase ClaimsPrincipalPermission.Creates a new instance of the ClaimsPrincipalPermission class.

Methods

CheckAccess(String, String)

Comprueba si la entidad de seguridad actual está autorizada para realizar la acción especificada en el recurso especificado.Checks if the current principal is authorized to perform the specified action on the specified resource.

Copy()

Devuelve una copia de la instancia actual de ClaimsPrincipalPermission.Returns a copy of the current ClaimsPrincipalPermission instance.

Demand()

Comprueba si la entidad de seguridad actual está autorizada para los pares de recurso-acción asociados a la instancia actual.Checks if the current principal is authorized for the resource-action pairs associated with the current instance.

Equals(Object)

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

(Inherited from Object)
FromXml(SecurityElement)

Reconstruye el permiso actual y su estado de la codificación XML especificada.Reconstructs the current permission and its state from the specified XML encoding.

GetHashCode()

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

(Inherited from Object)
GetType()

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

(Inherited from Object)
Intersect(IPermission)

Devuelve un permiso nuevo que es la intersección del permiso actual y el permiso especificado.Returns a permission that is the intersection of the current permission and the specified permission.

IsSubsetOf(IPermission)

Devuelve un valor que indica si el permiso actual es un subconjunto del permiso especificado.Returns a value that indicates whether current permission is a subset of the specified permission.

IsUnrestricted()

Devuelve un valor que indica si el permiso actual no está restringido.Returns a value that indicates whether the permission is unrestricted.

MemberwiseClone()

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

(Inherited from Object)
ToString()

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

(Inherited from Object)
ToXml()

Devuelve el formulario codificado XML del permiso actual y su estado.Returns the XML encoded form of the current permission and its state.

Union(IPermission)

Devuelve un permiso nuevo que es la unión del permiso actual y el permiso especificado.Returns a new permission that is the union of the current permission and the specified permission. Objeto ClaimsPrincipalPermission que tiene todos los pares de recurso-acción presentes en la instancia actual y la instancia de destino.ClaimsPrincipalPermission object that has all of the resource-action pairs that are present in the current instance and the target instance.

Applies to

See also