Autorizzazioni di sicurezza
Common Language Runtime consente al codice di eseguire solo le operazioni che tale codice è autorizzato a eseguire. Il runtime utilizza oggetti definiti autorizzazioni per applicare restrizioni al codice gestito. Il runtime fornisce classi di autorizzazione incorporate in vari spazi di nomi e supporta inoltre la progettazione e l'implementazione di classi di autorizzazione personalizzate.
Vi sono due tipi di autorizzazioni, ognuno con uno scopo specifico:
Autorizzazioni di accesso al codice rappresentano l'accesso a una risorsa protetta o la possibilità di eseguire un'operazione protetta.
Autorizzazioni della sicurezza basata sui ruoli offrono un meccanismo per individuare se un utente (o l'agente che opera per conto dell'utente) dispone di una particolare identità o è membro di un ruolo specifico. L'unica autorizzazione di sicurezza basata su ruoli è PrincipalPermission.
Le autorizzazioni di sicurezza possono essere costituite da una classe di autorizzazioni (sicurezza imperativa) o da un attributo che rappresenta una classe di autorizzazioni (sicurezza dichiarativa). La classe di base per le autorizzazioni di sicurezza è System.Security.CodeAccessPermission, mentre la classe di base per gli attributi delle autorizzazioni di sicurezza è System.Security.Permissions.CodeAccessSecurityAttribute.
A un'applicazione, in forma di assembly, viene concesso un set di autorizzazioni nel momento in cui viene caricata in un dominio dell'applicazione. Le concessioni vengono effettuate in genere mediante set di autorizzazioni predefiniti determinati dal metodo SecurityManager.GetStandardSandbox. Il set di concessioni determina le autorizzazioni disponibili per il codice. Il runtime concede le autorizzazioni in base alla posizione di origine del codice, ad esempio il computer locale, la Intranet locale o Internet. Al codice è inoltre possibile concedere autorizzazioni di accesso speciali se viene caricato in una sandbox. Per ulteriori informazioni sull'esecuzione del codice in una sandbox, vedere Procedura: eseguire codice parzialmente attendibile in un oggetto sandbox.
I permessi vengono utilizzati principalmente come illustrato di seguito:
Il codice di libreria può richiedere che i chiamanti dispongano di autorizzazioni specifiche. Se si inserisce un oggetto Demand per un'autorizzazione nel codice, per poter essere eseguito, tutto il codice che utilizza tale codice deve disporre di questa autorizzazione. Le richieste possono essere utilizzate per determinare se i chiamanti dispongono di accesso a risorse specifiche o per individuare l'identità di un chiamante.
Il codice può utilizzare le autorizzazioni per negare l'accesso alle risorse da proteggere. È possibile utilizzare SecurityAction.PermitOnly per specificare un set di autorizzazioni limitato negando implicitamente tutte le altre autorizzazioni. Non è tuttavia consigliabile utilizzare PermitOnly per impedire l'accesso allo scopo di offrire protezione contro un utilizzo improprio intenzionale. Gli assembly chiamati, che dispongono delle autorizzazioni implicitamente rifiutate nel set di concessione, possono eseguire l'override delle autorizzazioni negate eseguendo un oggetto SecurityAction.Assert per tutte le autorizzazioni che desiderano utilizzare. Se, ad esempio, è consentito solo UIPermission e viene chiamato un assembly che contiene implicitamente FileIOPermission, l'assembly può solo eseguire un oggetto Assert per FileIOPermission ed eseguire le operazioni sui file. L'unico modo per garantire una protezione sicura delle risorse da codice non attendibile negli assembly a cui si fa riferimento consiste nell'eseguire il codice con un set di concessione che non include tali autorizzazioni.
Vedere anche
Concetti
Autorizzazioni di accesso al codice
Autorizzazioni della sicurezza basata sui ruoli