ClaimsPrincipalPermission ClaimsPrincipalPermission ClaimsPrincipalPermission ClaimsPrincipalPermission Class

Definición

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. Esta clase no puede heredarse.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
Herencia
ClaimsPrincipalPermissionClaimsPrincipalPermissionClaimsPrincipalPermissionClaimsPrincipalPermission
Atributos
Implementaciones

Ejemplos

En el ejemplo siguiente se muestra cómo proteger un recurso mediante el Demand método, el CheckAccess método o una ClaimsPrincipalPermissionAttribute declaración.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 ClaimsAuthorizationManager el 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 SecurityException especificado, se produce una excepción; 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 ClaimsPrincipalPermission personalizado con la clase.The following XML shows the minimum configuration required to use a custom claims authorization manager with the ClaimsPrincipalPermission class. Debe, como mínimo, system.identityModel declarar las system.identityModel.services secciones y en el <configSection> elemento y, a continuación, especificar el administrador de autorización en un <elemento claimsAuthorizationManager> en el 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 en la que se especifica el administrador de autorización en el identityConfigurationName atributo <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>  

Comentarios

La ClaimsPrincipalPermission clase proporciona la capacidad de realizar comprobaciones de acceso imperativa mediante ClaimsAuthorizationManager el 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 Demand método o el método CheckAccess estático, puede proporcionar protección a los recursos desde 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 ClaimsPrincipalPermissionAttribute pueden realizar mediante la clase.Declarative access checks can be performed by using the ClaimsPrincipalPermissionAttribute class.

Importante

La ClaimsPrincipalPermission clase utiliza el administrador de autorización de notificaciones IdentityConfiguration configurado por el que se FederatedAuthentication.FederationConfiguration establece en la propiedad.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 este valor se hace referencia a la configuración de <identidad> mediante el elemento federationConfiguration que carga el tiempo de ejecución (por ejemplo, identityConfigurationName estableciendo el atributo).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 FederatedAuthentication.FederationConfigurationCreated controlador para el evento.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 basado en roles (RBAC) proporcionadas a través de la ClaimsAuthorizationManager PrincipalPermission clase; sin embargo, la clase 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 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 las clases que derivan de la CodeAccessPermission clase y usan un recorrido de pila para asegurarse de que todos los llamadores del código reciben un permiso ClaimsPrincipalPermission.realiza la 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 CheckAccess estático 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 Demand método.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 ClaimsPrincipalPermission , los objetos se pueden combinar Union a Intersect través de los métodos y.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 invocando el ClaimsAuthorizationManager.CheckAccess método del administrador de autorización de notificaciones configurado con un AuthorizationContext compuesto porThread.CurrentPrincipalla entidad de seguridad activa (), 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 excepción si la entidad de seguridad actual no está autorizada para realizar la acción en el recurso; de lo contrario, continúa la ejecución.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 ClaimsPrincipalPermission que contenga varios pares de recurso-acción, se invoca el ClaimsAuthorizationManager.CheckAccess método 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 Demand a se realice correctamente, 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.

Constructores

ClaimsPrincipalPermission(String, String) ClaimsPrincipalPermission(String, String) ClaimsPrincipalPermission(String, String) ClaimsPrincipalPermission(String, String)

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

Métodos

CheckAccess(String, String) CheckAccess(String, String) CheckAccess(String, String) 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() Copy() Copy() Copy()

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

Demand() Demand() Demand() 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) Equals(Object) Equals(Object) 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) FromXml(SecurityElement) FromXml(SecurityElement) 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() GetHashCode() GetHashCode() GetHashCode()

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

(Inherited from Object)
GetType() GetType() GetType() GetType()

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

(Inherited from Object)
Intersect(IPermission) Intersect(IPermission) Intersect(IPermission) 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) IsSubsetOf(IPermission) IsSubsetOf(IPermission) 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() IsUnrestricted() IsUnrestricted() IsUnrestricted()

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

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

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

(Inherited from Object)
ToString() ToString() ToString() ToString()

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

(Inherited from Object)
ToXml() ToXml() ToXml() 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) Union(IPermission) Union(IPermission) 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.

Se aplica a

Consulte también: