Rappresentazione
La rappresentazione è la possibilità di eseguire un thread in un contesto di sicurezza diverso dal contesto del processo proprietario del thread. Quando si esegue nel contesto di sicurezza del client, il server "è" il client, in qualche modo. Il thread del server usa un token di accesso che rappresenta le credenziali del client per ottenere l'accesso agli oggetti a cui il client ha accesso.
Il motivo principale della rappresentazione consiste nell'eseguire i controlli di accesso sull'identità del client. L'uso dell'identità del client per i controlli di accesso può causare restrizioni o espansione dell'accesso, a seconda di ciò che il client ha l'autorizzazione da eseguire. Si supponga, ad esempio, che un file server contenga file contenenti informazioni riservate e che ognuno di questi file sia protetto da un ACL. Per impedire a un client di ottenere l'accesso non autorizzato alle informazioni in questi file, il server può rappresentare il client prima di accedere ai file.
I token di accesso sono oggetti che descrivono il contesto di sicurezza di un processo o di un thread. Forniscono informazioni che includono l'identità di un account utente e un subset dei privilegi disponibili per l'account utente. Ogni processo ha un token di accesso primario che descrive il contesto di sicurezza dell'account utente associato al processo. Per impostazione predefinita, il sistema usa il token primario quando un thread del processo interagisce con un oggetto a protezione diretta. Tuttavia, quando un thread rappresenta un client, il thread di rappresentazione ha sia un token di accesso primario che un token di rappresentazione. Il token di rappresentazione rappresenta il contesto di sicurezza del client e questo token di accesso è quello usato per i controlli di accesso durante la rappresentazione. Quando la rappresentazione è finita, il thread viene ripristinato usando solo il token di accesso primario.
È possibile usare la funzione OpenProcessToken per ottenere un handle per il token primario di un processo. Usare la funzione OpenThreadToken per ottenere un handle per il token di rappresentazione di un thread.