Condividi tramite


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. La classe non può essere ereditata.

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
Ereditarietà
ClaimsPrincipalPermission
Attributi
Implementazioni

Esempio

Nell'esempio seguente viene illustrato come proteggere una risorsa usando il metodo, il DemandCheckAccess metodo o una ClaimsPrincipalPermissionAttribute dichiarazione. In ogni caso, viene richiamato il configurato ClaimsAuthorizationManager per valutare l'entità corrente rispetto alla risorsa e all'azione specificati. Se l'entità corrente non è autorizzata per l'azione specificata nella risorsa specificata, viene generata un'operazione SecurityException ; in caso contrario, l'esecuzione procede.

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()
        {
        }
    }
}

Il codice XML seguente mostra la configurazione minima necessaria per usare una gestione autorizzazioni attestazioni personalizzata con la ClaimsPrincipalPermission classe . È necessario, almeno, dichiarare sia le system.identityModelsystem.identityModel.services sezioni nell'elemento <configSection> che specificare gestione autorizzazioni in un <elemento claimsAuthorizationManager> nella configurazione dell'identità predefinita. Ciò garantisce che il gestore di autorizzazioni venga fatto riferimento dalla configurazione della federazione predefinita. In alternativa, è possibile specificare il nome della configurazione dell'identità in cui viene specificato gestione autorizzazioni nell'attributo dell'elemento identityConfigurationName<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>  

Commenti

La ClaimsPrincipalPermission classe offre la possibilità di eseguire controlli di accesso imperativi usando l'oggetto ClaimsAuthorizationManager configurato per un'applicazione. Richiamando il metodo o il Demand metodo statico CheckAccess , è possibile fornire 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. I controlli di accesso dichiarativi possono essere eseguiti usando la ClaimsPrincipalPermissionAttribute classe .

Importante

La ClaimsPrincipalPermission classe usa la gestione autorizzazioni attestazioni configurata dall'oggetto IdentityConfigurationFederatedAuthentication.FederationConfiguration impostato nella proprietà . Questo vale in tutti i casi, anche negli scenari in cui WS-Federation non viene usato; Ad esempio, applicazioni Web attive (WCF) e applicazioni console. È possibile specificare gestione autorizzazioni attestazioni nella configurazione o a livello di codice. Per specificare la gestione autorizzazioni attestazioni in un file di configurazione, impostare l'elemento <claimsAuthorizationManager> in un <elemento identityConfiguration e assicurarsi che questa configurazione di identità venga fatto riferimento all'elemento federationConfiguration>>caricato dal runtime, ad esempio impostando l'attributo.<identityConfigurationName Per impostare gestione autorizzazioni attestazioni a livello di codice, specificare un gestore per l'evento FederatedAuthentication.FederationConfigurationCreated .

A un livello, la funzionalità fornita da ClaimsPrincipalPermission è simile ai controlli di accesso in base al ruolo forniti tramite la PrincipalPermission classe. Tuttavia, la ClaimsAuthorizationManager classe esegue controlli in base alle attestazioni presentate dall'entità attiva. Ciò consente molto più granularità di quanto sia disponibile tramite controllo degli accessi in base al ruolo puro, in cui in genere molte autorizzazioni vengono raccolte in un singolo ruolo. Forse, più importante, l'autorizzazione basata sulle attestazioni consente una migliore separazione dei criteri di business e dei criteri di autorizzazione perché l'autorizzazione può essere richiesta per un'azione specifica su una risorsa nel codice e nei criteri back-end per configurare le attestazioni che l'entità di presentazione deve possedere per soddisfare la domanda. Come il controllo degli accessi in base al ruolo, ClaimsPrincipalPermission esegue un controllo di accesso basato sull'utente, ovvero, a differenza della sicurezza di accesso al codice implementato dalle classi che derivano dalla CodeAccessPermission classe e usa una procedura dettagliata dello stack per garantire che tutti i chiamanti del codice siano stati concessi un'autorizzazione, ClaimsPrincipalPermission esegue il controllo solo sull'entità corrente.

Il metodo statico CheckAccess controlla l'accesso per un'azione specificata in una risorsa specificata. La risorsa e l'azione sono entrambe stringhe e sono in genere URI. È anche possibile inizializzare un'istanza di ClaimsPrincipalPermission con un'azione e una risorsa e chiamare il Demand metodo. Anche se il costruttore accetta solo una singola risorsa e un'azione, ClaimsPrincipalPermission gli oggetti possono essere combinati tramite i Union metodi e Intersect . Un'autorizzazione creata usando questi metodi può contenere più coppie di azioni di risorsa.

Entrambi i metodi determinano l'accesso richiamando il ClaimsAuthorizationManager.CheckAccess metodo di gestione autorizzazioni attestazioni configurate con un'entità AuthorizationContext attiva (Thread.CurrentPrincipal), la risorsa e l'azione. Generano un valore SecurityException se l'entità corrente non è autorizzata a eseguire l'azione sulla risorsa. In caso contrario, l'esecuzione procede.

Nel caso di un oggetto ClaimsPrincipalPermission contenente più coppie di azioni di risorsa, il ClaimsAuthorizationManager.CheckAccess metodo viene richiamato per ognuna delle coppie di azioni di risorsa contenute nell'autorizzazione. Affinché la chiamata abbia Demand esito positivo, l'entità attiva deve essere autorizzata per tutte le coppie di azioni di risorsa contenute nell'autorizzazione.

Costruttori

ClaimsPrincipalPermission(String, String)

Crea una nuova istanza della classe ClaimsPrincipalPermission.

Metodi

CheckAccess(String, String)

Verifica se l'entità è autorizzata a eseguire l'azione specificata nella risorsa specificata.

Copy()

Restituisce una copia dell'istanza di ClaimsPrincipalPermission corrente.

Demand()

Controlla se l'entità corrente è autorizzata per le coppie risorsa-azione abbinate all'istanza corrente.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
FromXml(SecurityElement)

Ricostruisce l'autorizzazione corrente e il relativo stato dalla codifica XML specificata.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
Intersect(IPermission)

Restituisce un'autorizzazione che rappresenta l'intersezione dell'autorizzazione corrente con quella specificata.

IsSubsetOf(IPermission)

Restituisce un valore che indica se l'autorizzazione corrente è un subset dell'autorizzazione specificata.

IsUnrestricted()

Restituisce un valore che indica se l'autorizzazione è senza restrizioni.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)
ToXml()

Restituisce il form con codifica XML dell'autorizzazione corrente e del relativo stato.

Union(IPermission)

Restituisce una nuova autorizzazione che è l'unione dell'autorizzazione corrente e dell'autorizzazione specificata. Oggetto ClaimsPrincipalPermission con tutte le coppie risorsa-azione incluse nell'istanza corrente e nell'istanza di destinazione.

Si applica a

Vedi anche