Condividi tramite


Oggetti principale e identità

Annotazioni

Questo articolo si applica a Windows.

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

Il codice gestito può individuare l'identità o il ruolo di un'entità tramite un IPrincipal oggetto , che contiene un riferimento a un IIdentity oggetto . Può essere utile confrontare gli oggetti identity e principal con concetti familiari, ad esempio gli account utente e di gruppo. Nella maggior parte degli ambienti di rete, gli account utente rappresentano persone o programmi, mentre gli account di gruppo rappresentano determinate categorie di utenti e i diritti di cui dispongono. Analogamente, gli oggetti Identity .NET rappresentano gli utenti, mentre i ruoli rappresentano appartenenze e contesti di sicurezza. In .NET l'oggetto principale incapsula sia un oggetto Identity che un ruolo. Le applicazioni .NET concedono diritti al principal in base alla sua identità o, più comunemente, all'appartenenza al ruolo.

Oggetti di Identità

L'oggetto Identity incapsula informazioni sull'utente o sull'entità da convalidare. Al livello più semplice, gli oggetti Identity contengono un nome e un tipo di autenticazione. Il nome può essere il nome di un utente o il nome di un account Di Windows, mentre il tipo di autenticazione può essere un protocollo di accesso supportato, ad esempio Kerberos V5 o un valore personalizzato. .NET definisce un GenericIdentity oggetto 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 incapsula 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 esiste alcuna relazione obbligatoria tra un oggetto Identity e il token di processo di Windows in cui è in esecuzione un thread. Tuttavia, se l'oggetto Identity è un oggetto WindowsIdentity , si presuppone che l'identità rappresenti un token di sicurezza di Windows.

Oggetti principale

L'oggetto principal rappresenta il contesto di sicurezza in cui è in esecuzione il codice. Le applicazioni che implementano la sicurezza basata sui ruoli concedono diritti in base al ruolo associato a un oggetto principale. Analogamente agli oggetti Identity, .NET fornisce un GenericPrincipal oggetto e un WindowsPrincipal oggetto . È anche possibile definire le proprie classi principali personalizzate.

L'interfaccia IPrincipal definisce una proprietà per l'accesso a un oggetto Identity associato, nonché un metodo per determinare se l'utente identificato dall'oggetto Principal è un membro di un determinato ruolo. Tutte le classi Principal implementano l'interfaccia IPrincipal , nonché eventuali proprietà e metodi aggiuntivi necessari. Ad esempio, Common Language Runtime fornisce la classe WindowsPrincipal , che implementa funzionalità aggiuntive per il mapping dell'appartenenza a gruppi ai ruoli.

Un oggetto Principal è associato a un oggetto contesto di chiamata (CallContext) all'interno di un dominio applicazione (AppDomain). Viene sempre creato un contesto di chiamata predefinito con ogni nuovo AppDomain, quindi è sempre disponibile un contesto di chiamata per accettare l'oggetto Principal . Quando viene creato un nuovo thread, viene creato anche un oggetto CallContext per il thread. Il riferimento all'oggetto Principal viene copiato automaticamente dal thread di creazione al CallContext del nuovo thread. Se il runtime non riesce a determinare quale oggetto Principal appartiene all'autore del thread, segue i criteri predefiniti per la creazione dell'oggetto Principal e Identity .

Un criterio specifico del dominio applicazione configurabile definisce le regole per decidere quale tipo di oggetto Principal associare a un nuovo dominio applicazione. Se i criteri di sicurezza sono consentiti, il runtime può creare oggetti Principal e Identity che riflettono il token del sistema operativo associato al thread di esecuzione corrente. Per impostazione predefinita, il runtime usa oggetti Principal e Identity che rappresentano utenti non autenticati. Il runtime non crea questi oggetti Principal e identità predefiniti fino a quando il codice non tenta di accedervi.

Il codice attendibile che crea un dominio applicazione può impostare i criteri del dominio applicazione che controllano la costruzione degli oggetti entità e identità predefiniti. Questo criterio specifico del dominio applicazione si applica a tutti i thread di esecuzione in tale dominio applicazione. Un host non gestito attendibile ha intrinsecamente la possibilità di impostare questo criterio, ma il codice gestito che imposta questo criterio deve disporre di System.Security.Permissions.SecurityPermission per controllare i criteri di dominio.

Quando si trasmette un oggetto Principal tra domini applicativi ma all'interno dello stesso processo (e quindi nello stesso computer), l'infrastruttura di comunicazione remota copia un riferimento all'oggetto Principal associato al contesto del chiamante al contesto del chiamato.

Vedere anche