ClaimsPrincipalPermission 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í.
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. Esta clase no puede heredarse.
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
[<System.Serializable>]
type ClaimsPrincipalPermission = class
interface IPermission
interface ISecurityEncodable
interface IUnrestrictedPermission
Public NotInheritable Class ClaimsPrincipalPermission
Implements IPermission, IUnrestrictedPermission
- Herencia
-
ClaimsPrincipalPermission
- 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 . En cada caso, se invoca al configurado ClaimsAuthorizationManager para evaluar la entidad de seguridad actual con el recurso y la acción especificados. Si la entidad de seguridad actual no está autorizada para la acción especificada en el recurso especificado, se produce una SecurityException excepción ; de lo contrario, la ejecución continúa.
using System;
using System.IdentityModel.Services;
using System.Security.Claims;
using System.Security.Permissions;
using System.Threading;
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 ClaimsPrincipalPermission clase . Debe declarar, como mínimo, las system.identityModel
secciones y system.identityModel.services
del <configSection>
elemento y, a continuación, especificar el administrador de autorización en un <elemento claimsAuthorizationManager> en la configuración de identidad predeterminada. Esto garantizará que se haga referencia al administrador de autorización desde la configuración de federación predeterminada. Como alternativa, 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> .
<?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 imperativas mediante el ClaimsAuthorizationManager que está configurado para una aplicación. Al invocar el Demand método o el método estático CheckAccess , puede proporcionar protección a los recursos desde la ruta de acceso de ejecución del código según la directiva de autorización definida para el administrador de autenticación de notificaciones. Las comprobaciones de acceso declarativas se pueden realizar mediante la ClaimsPrincipalPermissionAttribute clase .
Importante
La ClaimsPrincipalPermission clase usa el administrador de autorización de notificaciones configurado por el IdentityConfiguration que se establece en la FederatedAuthentication.FederationConfiguration propiedad . Esto es cierto en todos los casos, incluso en escenarios en los que no se utiliza WS-Federation; por ejemplo, aplicaciones web activas (WCF) y aplicaciones de consola. Puede especificar el administrador de autorización de notificaciones en la configuración o mediante programación. 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 el <elemento federationConfiguration> al que hace referencia esta configuración de identidad (por ejemplo, estableciendo el identityConfigurationName
atributo ). Para establecer el administrador de autorización de notificaciones mediante programación, proporcione un controlador para el FederatedAuthentication.FederationConfigurationCreated evento.
En un nivel, la funcionalidad proporcionada por ClaimsPrincipalPermission es similar a las comprobaciones de acceso basadas en roles (RBAC) proporcionadas a través de la PrincipalPermission clase ; sin embargo, la ClaimsAuthorizationManager clase realiza comprobaciones basadas en las notificaciones presentadas por la entidad de seguridad activa. Esto permite una gran granularidad de la que está disponible a través de RBAC puro, donde muchos permisos se recopilan normalmente con un solo rol. 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 se puede usar para configurar qué notificaciones debe poseer la entidad de presentación para satisfacer la demanda. Al igual que 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 usa un tutorial de pila para asegurarse de que a todos los autores de llamadas del código se les ha concedido un permiso, ClaimsPrincipalPermission realiza su comprobación solo en la entidad de seguridad actual.
El método estático CheckAccess comprueba el acceso de una acción especificada en un recurso especificado. El recurso y la acción son cadenas y suelen ser URI. También puede inicializar una instancia de ClaimsPrincipalPermission con una acción y un recurso y llamar al Demand método . Aunque el constructor solo toma un único recurso y una acción, ClaimsPrincipalPermission los objetos se pueden combinar a través de los Union métodos y Intersect . Un permiso creado mediante estos métodos puede contener varios pares de acción de recursos.
Ambos métodos determinan el acceso invocando el ClaimsAuthorizationManager.CheckAccess método 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. 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, la ejecución continúa.
En el caso de un ClaimsPrincipalPermission objeto que contiene varios pares de acción de recursos, se invoca el ClaimsAuthorizationManager.CheckAccess método para cada uno de los pares de acción de recursos contenidos en el permiso. Para que la llamada se Demand realice correctamente, la entidad de seguridad activa debe estar autorizada para todos los pares de acción de recursos contenidos en el permiso.
Constructores
ClaimsPrincipalPermission(String, String) |
Crea una nueva instancia de la clase ClaimsPrincipalPermission. |
Métodos
CheckAccess(String, String) |
Comprueba si la entidad de seguridad actual está autorizada para realizar la acción especificada en el recurso especificado. |
Copy() |
Devuelve una copia de la instancia actual de ClaimsPrincipalPermission. |
Demand() |
Comprueba si la entidad de seguridad actual está autorizada para los pares de recurso-acción asociados a la instancia actual. |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
FromXml(SecurityElement) |
Reconstruye el permiso actual y su estado de la codificación XML especificada. |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
Intersect(IPermission) |
Devuelve un permiso nuevo que es la intersección del permiso actual y el permiso especificado. |
IsSubsetOf(IPermission) |
Devuelve un valor que indica si el permiso actual es un subconjunto del permiso especificado. |
IsUnrestricted() |
Devuelve un valor que indica si el permiso actual no está restringido. |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |
ToXml() |
Devuelve el formulario codificado XML del permiso actual y su estado. |
Union(IPermission) |
Devuelve un permiso nuevo que es la unión del permiso actual y el permiso especificado. Objeto ClaimsPrincipalPermission que tiene todos los pares de recurso-acción presentes en la instancia actual y la instancia de destino. |