Condividi tramite


Impostazione di principali e criteri della protezione basata sui ruoli

Aggiornamento: novembre 2007

La sicurezza basata sui ruoli consente a un componente di identificare gli utenti correnti e i ruoli ad essi associati in fase di esecuzione. Tali informazioni vengono poi messe in relazione ai criteri di sicurezza degli accessi del codice per determinare il set delle autorizzazioni riconosciute in fase di esecuzione. Per un determinato dominio applicazione, l'host può cambiare il criterio di sicurezza basata sui ruoli predefinito e impostare un'entità di sicurezza predefinita. Un principale di sicurezza rappresenta un utente e i ruoli ad esso associati.

La sicurezza basata sui ruoli è comunemente utilizzata per implementare schemi di autenticazione personalizzati. L'host ASP.NET utilizza ad esempio la sicurezza basata sui ruoli per implementare uno schema di autenticazione basato sulle informazioni utente che ottiene da Internet Information Services (IIS).

Sia la definizione di utente che quella di ruoli dell'utente sono specifiche dell'applicazione. Un'applicazione può avere un concetto di utente diverso da quello di Windows. Un'applicazione può ad esempio chiedere all'utente di immettere un nome utente e una password all'atto dell'accesso. La coppia di valori nome utente/password è indipendente da quella con cui l'utente ha eseguito l'accesso a Windows.

Impostazione esplicita dell'entità di sicurezza per un thread

Se per un thread è stata impostata l'entità di sicurezza, il criterio e l'entità di sicurezza predefinita del dominio applicazione verranno ignorati. Il thread ad esempio potrebbe aver impostato la propria entità di sicurezza tramite la proprietà statica CurrentPrincipal (la proprietà Shared in Visual Basic) della classe Thread. In alternativa, il thread potrebbe aver acquisito la propria entità di sicurezza dal thread che l'ha avviato.

Nota:

In .NET Framework versione 2.0, quando un thread avvia un altro thread o mette in coda un elemento di lavoro affinché venga eseguito dal pool di thread, il contesto del thread (inclusa l'entità di sicurezza) passa automaticamente al thread figlio o al thread del pool di thread. In .NET Framework versioni 1.0 e 1.1 il contesto passava solo ai thread avviati da un thread e non ai thread del pool di thread.

Se un thread privo di un'entità di sicurezza esegue un'azione che richiede una tale entità, ne verrà fornita una sulla base del criterio di sicurezza e dell'entità di sicurezza predefinita del dominio applicazione corrente.

Nota:

Quando un thread privo di un'entità di sicurezza utilizza la proprietà statica CurrentPrincipal per eseguire una query sulla relativa entità di sicurezza, vengono utilizzati i valori predefiniti del dominio applicazione per impostare l'entità. In altri termini, CurrentPrincipal non restituisce mai null.

Criterio ed entità di sicurezza predefinita per un dominio applicazione

Un host può impostare un'entità di sicurezza predefinita per un dominio applicazione chiamando il metodo SetThreadPrincipal. Se è stata fornita un'entità di sicurezza predefinita, verrà assegnata a qualsiasi thread che sia in esecuzione nel dominio applicazione, che richieda una tale entità e che non ne abbia già una.

Nota:

L'entità di sicurezza predefinita non viene applicata automaticamente al thread che chiama SetThreadPrincipal, anche se il thread non ha una tale entità. Se in un secondo tempo il thread richiede un'entità di sicurezza e nel frattempo non l'ha acquisita, gliene verrà assegnata una sulla base dell'entità di sicurezza predefinita e del criterio del dominio applicazione in cui è al momento in esecuzione.

Se per il dominio applicazione non è stata impostata un'entità di sicurezza predefinita, al thread verrà assegnata un'entità di sicurezza sulla base del criterio del dominio applicazione. Per impostazione predefinita, il criterio di un dominio applicazione prevede che al thread venga assegnata un'entità di sicurezza generica non autenticata. Un host può cambiare tale criterio per un dominio applicazione chiamando il metodo SetPrincipalPolicy. Il codice gestito seguente ad esempio crea un dominio applicazione e ne imposta il criterio in modo che venga utilizzata l'entità di sicurezza di Windows corrente.

Dim ad As AppDomain = AppDomain.CreateDomain("Child")
ad.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
AppDomain ad = AppDomain.CreateDomain("Child");
ad.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
AppDomain^ ad = AppDomain::CreateDomain("Child");
ad->SetPrincipalPolicy(PrincipalPolicy::WindowsPrincipal);

Un host non gestito può accedere ai domini applicazione tramite l'interfaccia _AppDomain, che mantiene l'ordine vtable tra le diverse versioni di .NET Framework.

Vedere anche

Riferimenti

System.AppDomain

Altre risorse

Hosting di Common Language Runtime

Sicurezza basata sui ruoli

Concetti principali sulla protezione