Partager via


ImpersonateLoggedOnUser, fonction (securitybaseapi.h)

La fonction ImpersonateLoggedOnUser permet au thread appelant d’emprunter l’identité du contexte de sécurité d’un utilisateur connecté. L’utilisateur est représenté par un descripteur de jeton.

Syntaxe

BOOL ImpersonateLoggedOnUser(
  [in] HANDLE hToken
);

Paramètres

[in] hToken

Handle vers un jeton d’accès principal ou emprunt d’identité qui représente un utilisateur connecté. Il peut s’agir d’un handle de jeton retourné par un appel à LogonUser, CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken ou OpenThreadToken. Si hToken est un handle vers un jeton principal, le jeton doit avoir TOKEN_QUERY et TOKEN_DUPLICATE accès. Si hToken est un handle vers un jeton d’emprunt d’identité, le jeton doit avoir TOKEN_QUERY et TOKEN_IMPERSONATE accès.

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations d’erreur étendues, appelez GetLastError.

Remarques

L’emprunt d’identité dure jusqu’à ce que le thread se ferme ou qu’il appelle RevertToSelf.

Le thread appelant n’a pas besoin de disposer de privilèges particuliers pour appeler ImpersonateLoggedOnUser.

Si l’appel à ImpersonateLoggedOnUser échoue, la connexion cliente n’est pas empruntée et la demande du client est effectuée dans le contexte de sécurité du processus. Si le processus s’exécute en tant que compte hautement privilégié, tel que LocalSystem ou membre d’un groupe d’administration, l’utilisateur peut être en mesure d’effectuer des actions qu’il serait autrement interdit. Par conséquent, il est important de toujours vérifier la valeur de retour de l’appel et, en cas d’échec, déclencher une erreur ; ne continuez pas l’exécution de la requête cliente.

Toutes les fonctions d’emprunt d’identité, y compris ImpersonateLoggedOnUser , autorisent l’emprunt d’identité demandé si l’une des valeurs suivantes est vraie :

  • L’appelant a le privilège SeImpersonatePrivilege .
  • Un processus (ou un autre processus dans la session d’ouverture de session de l’appelant) a créé le jeton à l’aide d’informations d’identification explicites via la fonction LogonUser ou LsaLogonUser .
  • L’identité authentifiée est identique à l’appelant.

Important

Le jeton doit avoir un niveau d’emprunt d’identité de SecurityImpersonation ou supérieur pour que l’emprunt d’identité réussisse. Les jetons avec des niveaux SecurityIdentification ou SecurityAnonymous ne peuvent pas être utilisés pour l’emprunt d’identité, même si l’appelant a SeImpersonatePrivilege. Les jetons SecurityIdentification autorisent la vérification d’identité et les vérifications de liste de contrôle d’accès, mais n’autorisent pas l’emprunt d’identité.

Exigences de niveau d’emprunt d’identité

Le comportement varie en fonction du niveau d’emprunt d’identité du jeton :

  • SecurityAnonymous : le serveur ne peut pas obtenir les informations d’identité du client et ne peut pas emprunter l’identité du client.
  • SecurityIdentification : le serveur peut obtenir l’identité du client et effectuer la validation d’accès, mais ne peut pas emprunter l’identité du client. Il s’agit du niveau par défaut pour de nombreux scénarios.
  • SecurityImpersonation : le serveur peut emprunter l’identité du contexte de sécurité du client sur le système local. Il s’agit du niveau minimal requis pour que ImpersonateLoggedOnUser réussisse.
  • SecurityDelegation : le serveur peut emprunter l’identité du client sur des systèmes distants, ainsi que localement.

Windows XP avec SP1 et versions antérieures : Le privilège SeImpersonatePrivilege n’est pas pris en charge.

Pour plus d’informations sur l’emprunt d’identité, consultez Emprunt d’identité du client.

Spécifications

Requirement Valeur
Client minimum requis Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
plateforme cible Fenêtres
Header securitybaseapi.h (include Windows.h)
Library Advapi32.lib
DLL Advapi32.dll

Voir aussi

Fonctions de contrôle d’accès client/serveur

Vue d’ensemble du contrôle d’accès client/serveur

CreateProcessAsUser

CreateRestrictedToken

DuplicateToken

DuplicateTokenEx

LogonUser

OpenProcessToken

OpenThreadToken

RevertToSelf