ClaimsPrincipalPermission Classe

Definizione

Rappresenta un'autorizzazione che utilizza un'implementazione ClaimsAuthorizationManager per determinare se l'accesso a una risorsa deve essere concesso all'entità di sicurezza attiva.Represents a permission that uses a ClaimsAuthorizationManager implementation to determine if access to a resource should be granted to the active principal. Questa classe non può essere ereditata.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
Ereditarietà
ClaimsPrincipalPermission
Attributi
Implementazioni

Esempi

Nell'esempio seguente viene illustrato come proteggere una risorsa utilizzando il Demand metodo, il CheckAccess metodo o una ClaimsPrincipalPermissionAttribute dichiarazione.The following example shows how to protect a resource by using the Demand method, the CheckAccess method, or a ClaimsPrincipalPermissionAttribute declaration. In ogni caso, viene richiamato l'oggetto configurato ClaimsAuthorizationManager per valutare l'entità corrente rispetto alla risorsa e all'azione specificate.In each case, the configured ClaimsAuthorizationManager is invoked to evaluate the current principal against the specified resource and action. Se l'entità corrente non è autorizzata per l'azione specificata sulla risorsa specificata, viene SecurityException generata un'eccezione; in caso contrario, l'esecuzione continua.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()
        {
        }
    }
}

Nel codice XML seguente viene illustrata la configurazione minima necessaria per utilizzare un gestore autorizzazioni delle ClaimsPrincipalPermission attestazioni personalizzato con la classe.The following XML shows the minimum configuration required to use a custom claims authorization manager with the ClaimsPrincipalPermission class. È necessario, come minimo, dichiarare system.identityModel entrambe le system.identityModel.services sezioni e nell' <configSection> elemento e quindi specificare gestione autorizzazioni in un <elemento ClaimsAuthorizationManager nel> configurazione predefinita dell'identità.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. In questo modo verrà fatto riferimento a gestione autorizzazioni dalla configurazione di federazione predefinita.This will ensure that your authorization manager is referenced from the default federation configuration. In alternativa, è possibile specificare il nome della configurazione di identità in cui è specificato il gestore autorizzazioni nell' identityConfigurationName attributo <dell'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>  

Commenti

La ClaimsPrincipalPermission classe fornisce la possibilità di eseguire controlli di accesso imperativi ClaimsAuthorizationManager usando l'oggetto configurato per un'applicazione.The ClaimsPrincipalPermission class provides the capability to perform imperative access checks by using the ClaimsAuthorizationManager that is configured for an application. Richiamando il Demand metodo o il metodo CheckAccess statico, è possibile fornire la protezione alle risorse dall'interno del percorso di esecuzione del codice in base ai criteri di autorizzazione definiti per il gestore di autenticazione delle attestazioni.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. I controlli di accesso dichiarativi possono essere ClaimsPrincipalPermissionAttribute eseguiti tramite la classe.Declarative access checks can be performed by using the ClaimsPrincipalPermissionAttribute class.

Importante

La ClaimsPrincipalPermission classe utilizza la gestione autorizzazioni delle attestazioni configurata dall'oggetto IdentityConfiguration impostato FederatedAuthentication.FederationConfiguration nella proprietà.The ClaimsPrincipalPermission class uses the claims authorization manager configured by the IdentityConfiguration that is set under the FederatedAuthentication.FederationConfiguration property. Questo vale in tutti i casi, anche negli scenari in cui non viene usato WS-Federation. ad esempio applicazioni Web e applicazioni console attive (WCF).This is true in all cases, even in scenarios where WS-Federation is not used; for example, active (WCF) Web applications and Console applications. È possibile specificare la gestione autorizzazioni delle attestazioni in configurazione o a livello di codice.You can specify the claims authorization manager either in configuration or programmatically. Per specificare la gestione autorizzazioni delle attestazioni in un file di configurazione <,> impostare l'elemento <ClaimsAuthorizationManager> in un elemento IdentityConfiguration e verificare che viene fatto riferimento alla configurazione dell' identityConfigurationName <identità dall'elemento federationConfiguration> che viene caricato dal runtime (ad esempio, impostando l'attributo).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). Per impostare la gestione autorizzazioni delle attestazioni a livello di codice, fornire FederatedAuthentication.FederationConfigurationCreated un gestore per l'evento.To set the claims authorization manager programmatically, provide a handler for the FederatedAuthentication.FederationConfigurationCreated event.

A un livello, la funzionalità fornita da ClaimsPrincipalPermission è simile ai controlli degli accessi in base al ruolo (RBAC) forniti PrincipalPermission tramite la classe. tuttavia ClaimsAuthorizationManager , la classe esegue i controlli in base alle attestazioni presentate dall'entità attiva.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. Questo consente una granularità molto maggiore di quella disponibile tramite il controllo degli accessi in base al ruolo, in cui molte autorizzazioni vengono in genere raccolte in un singolo ruolo.This enables far more granularity than is available through pure RBAC, where many permissions are typically collected under a single role. Forse, ancora più importante, l'autorizzazione basata sulle attestazioni consente una migliore separazione della logica di business e dei criteri di autorizzazione perché l'autorizzazione può essere richiesta per un'azione specifica su una risorsa nel codice e i criteri di back-end possono essere usati per configurare quali attestazioni l'entità di presentazione deve possedere per soddisfare la richiesta.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. Analogamente a ClaimsPrincipalPermission RBAC, esegue un controllo dell'accesso basato sull'utente, a differenza della sicurezza dall'accesso di codice implementato dalle classi che derivano CodeAccessPermission dalla classe e usano un percorso stack per garantire che a tutti i chiamanti del codice sia stata concessa un'autorizzazione, ClaimsPrincipalPermissionesegue il controllo solo sull'entità corrente.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.

Il metodo CheckAccess statico controlla l'accesso per un'azione specificata su una risorsa specificata.The static CheckAccess method checks access for a specified action on a specified resource. La risorsa e l'azione sono entrambe stringhe e sono in genere URI.The resource and action are both strings and are typically URIs. È anche possibile inizializzare un'istanza ClaimsPrincipalPermission di con un'azione e una risorsa e chiamare Demand il metodo.You can also initialize an instance of ClaimsPrincipalPermission with an action and a resource and call the Demand method. Sebbene il costruttore accetti solo una singola risorsa e un'unica ClaimsPrincipalPermission azione, gli oggetti possono essere Union combinati tramite i metodi e Intersect .Although the constructor only takes a single resource and action, ClaimsPrincipalPermission objects can be combined through the Union and Intersect methods. Un'autorizzazione creata usando questi metodi può contenere più coppie di azioni risorsa.A permission created by using these methods may contain multiple resource-action pairs.

Entrambi i metodi determinano l'accesso richiamando il ClaimsAuthorizationManager.CheckAccess metodo del gestore autorizzazioni delle attestazioni configurato con un AuthorizationContext composto diThread.CurrentPrincipalentità attiva (), la risorsa e l'azione.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. Generano SecurityException se l'entità corrente non è autorizzata a eseguire l'azione sulla risorsa. in caso contrario, l'esecuzione continua.They throw a SecurityException if the current principal is not authorized to perform the action on the resource; otherwise, execution proceeds.

Nel caso di un oggetto ClaimsPrincipalPermission che contiene più coppie di azioni risorsa, il ClaimsAuthorizationManager.CheckAccess metodo viene richiamato per ogni coppia di azioni risorsa contenuta nell'autorizzazione.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. Affinché la chiamata Demand a abbia esito positivo, è necessario che l'entità attiva sia autorizzata per tutte le coppie risorsa-azione contenute nell'autorizzazione.For the call to Demand to succeed, the active principal must be authorized for all of the resource-action pairs contained in the permission.

Costruttori

ClaimsPrincipalPermission(String, String)

Crea una nuova istanza della classe ClaimsPrincipalPermission.Creates a new instance of the ClaimsPrincipalPermission class.

Metodi

CheckAccess(String, String)

Verifica se l'entità è autorizzata a eseguire l'azione specificata nella risorsa specificata.Checks if the current principal is authorized to perform the specified action on the specified resource.

Copy()

Restituisce una copia dell'istanza di ClaimsPrincipalPermission corrente.Returns a copy of the current ClaimsPrincipalPermission instance.

Demand()

Controlla se l'entità corrente è autorizzata per le coppie risorsa-azione abbinate all'istanza corrente.Checks if the current principal is authorized for the resource-action pairs associated with the current instance.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
FromXml(SecurityElement)

Ricostruisce l'autorizzazione corrente e il relativo stato dalla codifica XML specificata.Reconstructs the current permission and its state from the specified XML encoding.

GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
Intersect(IPermission)

Restituisce un'autorizzazione che rappresenta l'intersezione dell'autorizzazione corrente con quella specificata.Returns a permission that is the intersection of the current permission and the specified permission.

IsSubsetOf(IPermission)

Restituisce un valore che indica se l'autorizzazione corrente è un subset dell'autorizzazione specificata.Returns a value that indicates whether current permission is a subset of the specified permission.

IsUnrestricted()

Restituisce un valore che indica se l'autorizzazione è senza restrizioni.Returns a value that indicates whether the permission is unrestricted.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Ereditato da Object)
ToXml()

Restituisce il form con codifica XML dell'autorizzazione corrente e del relativo stato.Returns the XML encoded form of the current permission and its state.

Union(IPermission)

Restituisce una nuova autorizzazione che è l'unione dell'autorizzazione corrente e dell'autorizzazione specificata.Returns a new permission that is the union of the current permission and the specified permission. Oggetto ClaimsPrincipalPermission con tutte le coppie risorsa-azione incluse nell'istanza corrente e nell'istanza di destinazione.ClaimsPrincipalPermission object that has all of the resource-action pairs that are present in the current instance and the target instance.

Si applica a

Vedi anche