Condividi tramite


Oggetti Principal e Identity

Nota

Questo articolo si applica a Windows.

Per informazioni su ASP.NET Core, vedere Sicurezza ASP.NET Core.

Il codice gestito può individuare l'identità o il ruolo di un'entità tramite un oggetto IPrincipal, contenente un riferimento a un oggetto IIdentity. Può essere utile paragonare oggetti Identity e Principal a concetti familiari quali account utente e di gruppo. Nella maggior parte degli ambienti di rete, gli account utente rappresentano utenti o programmi, mentre gli account di gruppo rappresentano determinate categorie di utenti e i diritti che essi detengono. Analogamente, gli oggetti Identity di .NET rappresentano utenti, mentre i ruoli rappresentano le appartenenze e i contesti di sicurezza. In .NET l'oggetto entità di sicurezza incapsula sia un oggetto Identity sia un ruolo. Le applicazioni di .NET concedono diritti all’entità di sicurezza sulla base dell'identità che esso presenta oppure, più comunemente, al ruolo che riveste.

Oggetti Identity

L'oggetto Identity incapsula informazioni sull'utente o sull'entità da convalidare. Nella forma più semplice, gli oggetti Identity contengono un nome e un tipo di autenticazione. Il nome può essere quello di un utente o di un account Windows, mentre il tipo di autenticazione può corrispondere a un protocollo di accesso supportato, quale Kerberos V5, oppure a un valore personalizzato. .NET definisce un oggetto GenericIdentity che può essere usato per la maggior parte degli scenari di accesso personalizzati, e un oggetto più specializzato WindowsIdentity che può essere usato quando si vuole che l'applicazione si basi sull'autenticazione di Windows. È inoltre possibile definire una classe di identità personalizzata che contenga informazioni utente personalizzate.

L'interfaccia IIdentity definisce le proprietà per l'accesso a un nome e a un tipo di autenticazione, ad esempio Kerberos V5 o NTLM. Tutte le classi Identity implementano l'interfaccia IIdentity. Non è necessaria alcuna relazione tra un oggetto Identity e il token di processo di Windows in cui è in esecuzione un thread. Se tuttavia l'oggetto Identity è un oggetto WindowsIdentity, si presupporrà che l'identità rappresenti un token di sicurezza di Windows.

Oggetti Principal

L'oggetto Principal rappresenta il contesto di sicurezza in cui viene eseguito il codice. Le applicazioni che implementano la sicurezza basata sui ruoli concedono diritti sulla base del ruolo associato all'oggetto Principal. Analogamente agli oggetti Identity, .NET fornisce un oggetto GenericPrincipal e un oggetto WindowsPrincipal. È inoltre possibile definire classi di principali personalizzate.

L'interfaccia IPrincipal definisce una proprietà che consente di accedere a un oggetto Identity associato nonché un metodo che consente di determinare se l'utente identificato dall'oggetto Principal è membro di un determinato ruolo. Tutte le classi Principal implementano l'interfaccia IPrincipal nonché ulteriori proprietà e metodi eventualmente necessari. Common Language Runtime fornisce ad esempio la classe WindowsPrincipal, che implementa funzionalità aggiuntive per il mapping tra l'appartenenza a un gruppo e i ruoli.

Un oggetto Entità di sicurezza è associato a un oggetto contesto di chiamata (CallContext) all'interno di un dominio dell’applicazione (AppDomain). Viene sempre creato un contesto di chiamata predefinito con ciascun nuovo AppDomain, così esiste sempre un contesto di chiamata disponibile per accettare l'oggetto Principal. Quando viene creato un nuovo thread, per tale thread viene creato anche un oggetto CallContext. Il riferimento all'oggetto Principal viene automaticamente copiato dal thread di origine al CallContext del nuovo thread. Se il runtime non è in grado di determinare quale oggetto Principal appartiene al creatore del thread, si atterrà ai criteri predefiniti per la creazione di oggetti Principal e Identity.

Dei criteri configurabili specifici di un dominio applicazione definiscono le regole in base alle quali decidere quale tipo di oggetto Principal associare a un nuovo dominio applicazione. Dove consentito dai criteri di sicurezza, il runtime può creare oggetti Principal e Identity che riflettono il token del sistema operativo associato al thread di esecuzione corrente. In base all'impostazione predefinita, il runtime utilizza oggetti Principal e Identity che rappresentano utenti non autenticati. Il runtime non crea questi oggetti Principal e Identity predefiniti finché il codice non tenta di accedervi.

Il codice attendibile che crea un dominio applicazione può impostare i criteri di sicurezza del dominio applicazione che controllano la costruzione degli oggetti Principal e Identity predefiniti. Questi criteri specifici del dominio applicazione si applicano a tutti i thread di esecuzione di tale dominio applicazione. Un host attendibile non gestito ha intrinsecamente la possibilità di impostare questo criterio, ma il codice gestito che imposta questo criterio deve avere System.Security.Permissions.SecurityPermission per il controllo dei criteri di dominio.

Quando si trasmette un oggetto Principal tra più domini applicazione, ma all'interno dello stesso processo e quindi sullo stesso computer, l'infrastruttura remota consente di copiare nel contesto del chiamato un riferimento all'oggetto Principal associato al contesto del chiamante.

Vedi anche