Rappresentazione client (autorizzazione)
La rappresentazione è la possibilità di eseguire un thread usando informazioni di sicurezza diverse rispetto al processo proprietario del thread. In genere, un thread in un'applicazione server rappresenta un client. In questo modo il thread del server può agire per conto di tale client per accedere agli oggetti nel server o convalidare l'accesso ai propri oggetti del client.
L'API Microsoft Windows fornisce le funzioni seguenti per avviare una rappresentazione:
- Un'applicazione server DDE può chiamare la funzione DdeImpersonateClient per rappresentare un client.
- Un server named pipe può chiamare la funzione ImpersonateNamedPipeClient.
- È possibile chiamare la funzione ImpersonateLoggedOnUser per rappresentare il contesto di sicurezza di un token di accesso dell'utente connesso.
- La funzione ImpersonateSelf consente a un thread di generare una copia del proprio token di accesso. Ciò è utile quando un'applicazione deve modificare il contesto di sicurezza di un singolo thread. Ad esempio, a volte è necessario abilitare un privilegio solo un thread di un processo.
- È possibile chiamare la funzione SetThreadToken per fare in modo che il thread di destinazione venga eseguito nel contesto di sicurezza di un token di rappresentazione specificato.
- Un'applicazione server RPC (Remote Procedure Call) Microsoft può chiamare la funzione RpcImpersonateClient per rappresentare un client.
- Un pacchetto di sicurezza o un server applicazioni può chiamare la funzione ImpersonateSecurityContext per rappresentare un client.
Per la maggior parte di queste rappresentazioni, il thread di rappresentazione può ripristinare il proprio contesto di sicurezza chiamando la funzione RevertToSelf. L'eccezione è la rappresentazione RPC, in cui l'applicazione server RPC chiama RpcRevertToSelf o RpcRevertToSelfEx per ripristinare il proprio contesto di sicurezza.
Nota: se si rappresenta un utente da un servizio Win32 e si chiamano api che si basano sulle variabili di ambiente utente, potrebbe essere necessario chiamare RegDisablePredefinedCache prima di eseguire la rappresentazione.