Impostazione di principali e criteri della sicurezza basata sui ruoli
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, i criteri 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.
![]() |
---|
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.
![]() |
---|
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. |
Criteri 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.
![]() |
---|
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 dei criteri 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 dei criteri del dominio applicazione. Per impostazione predefinita, i criteri di un dominio applicazione prevedono che al thread venga assegnata un'entità di sicurezza generica non autenticata. Un host può cambiare tali criteri per un dominio applicazione chiamando il metodo SetPrincipalPolicy. Il codice gestito seguente ad esempio crea un dominio applicazione e ne imposta i criteri 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
Concetti
Cenni preliminari sull'hosting