Emprunt d’identité du client (autorisation)
L’emprunt d’identité est la capacité d’un thread à s’exécuter en utilisant des informations de sécurité différentes de celles du processus propriétaire du thread. En règle générale, un thread dans une application serveur emprunte l’identité d’un client. Cela permet au thread du serveur d’agir au nom de ce client pour accéder aux objets du serveur ou valider l’accès aux objets du client.
L’API Microsoft Windows fournit les fonctions suivantes pour lancer un emprunt d’identité :
- Une application serveur DDE peut appeler la fonction DdeImpersonateClient pour emprunter l’identité d’un client.
- Un serveur de tube nommé peut appeler la fonction ImpersonateNamedPipeClient.
- Vous pouvez appeler la fonction ImpersonateLoggedOnUser pour emprunter le contexte de sécurité du jeton d’accès d’un utilisateur connecté.
- La fonction ImpersonateSelf permet à un thread de générer une copie de son propre jeton d’accès. Cette fonction est utile lorsqu’une application doit modifier le contexte de sécurité d’un seul thread. Par exemple, il arrive qu’un seul thread d’un processus doive activer un privilège.
- Vous pouvez appeler la fonction SetThreadToken pour que le thread cible s’exécute dans le contexte de sécurité d’un jeton d’emprunt d’identité spécifié.
- Une application serveur Microsoft Remote Procedure Call (RPC) peut appeler la fonction RpcImpersonateClient pour emprunter l’identité d’un client.
- Un package de sécurité ou un serveur d’application peut appeler la fonction ImpersonateSecurityContext pour emprunter l’identité d’un client.
Pour la plupart de ces emprunts d’identité, le thread d’emprunt peut revenir à son propre contexte de sécurité en appelant la fonction RevertToSelf. L’exception est l’emprunt d’identité RPC, dans lequel l’application serveur RPC appelle RpcRevertToSelf ou RpcRevertToSelfEx pour revenir à son propre contexte de sécurité.
Remarque : si vous vous faites passer pour un utilisateur à partir d’un service Win32 et que vous appelez des API qui reposent sur des variables d’environnement utilisateur, il se peut que vous deviez appeler RegDisablePredefinedCache avant de procéder à l’emprunt d’identité.