Share via


Fonction ImpersonateSecurityContext (sspi.h)

La fonction ImpersonateSecurityContext permet à un serveur d’emprunter l’identité d’un client à l’aide d’un jeton obtenu précédemment par un appel à AcceptSecurityContext (Général) ou QuerySecurityContextToken. Cette fonction permet au serveur d’applications d’agir en tant que client, de sorte que tous les contrôles d’accès nécessaires sont appliqués.

Syntaxe

KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(
  [in] PCtxtHandle phContext
);

Paramètres

[in] phContext

Handle du contexte à emprunter l’identité. Ce handle doit avoir été obtenu par un appel à la fonction AcceptSecurityContext (Général).

Valeur retournée

Si la fonction réussit, la fonction retourne SEC_E_OK.

Si la fonction échoue, elle retourne le code d’erreur suivant.

Code de retour Description
SEC_E_INVALID_HANDLE
Le handle passé à la fonction n’est pas valide.
SEC_E_NO_IMPERSONATION
Impossible d’emprunter l’identité du client.
SEC_E_UNSUPPORTED_FUNCTION
Cette valeur est retournée par le mode noyau Schannel pour indiquer que cette fonction n’est pas prise en charge.

Remarques

L’application serveur appelle la fonction ImpersonateSecurityContext lorsqu’elle doit emprunter l’identité du client. Pour ce faire, le serveur doit avoir obtenu un handle de contexte valide. Pour obtenir le handle de contexte, le serveur doit appeler AcceptSecurityContext (Général) pour envoyer le jeton de sécurité entrant du client au système de sécurité. Le serveur obtient un handle de contexte si le contexte entrant est validé. La fonction crée un jeton d’emprunt d’identité et permet au thread ou au processus de s’exécuter avec le contexte d’emprunt d’identité.

Lors de l’utilisation du fournisseur de support de sécurité (SSP) Schannel, l’application serveur doit passer l’indicateur ASC_REQ_MUTUAL_AUTH lors de l’appel d’AcceptSecurityContext (Général). Cela garantit que le client est invité à obtenir un certificat client pendant l’établissement d’une liaison SSL/TLS. Lorsqu’un certificat client est reçu, le package Schannel vérifie le certificat client et tente de le mapper à un compte d’utilisateur. Lorsque ce mappage réussit, un jeton utilisateur client est créé et cette fonction réussit.

Le serveur d’applications doit appeler la fonction RevertSecurityContext à la fin de l’opération ou lorsqu’il doit restaurer son propre contexte de sécurité.

ImpersonateSecurityContext n’est pas disponible avec tous les packages de sécurité sur toutes les plateformes. En règle générale, elle est implémentée uniquement sur les plateformes et avec des packages de sécurité qui prennent en charge l’emprunt d’identité. Pour savoir si un package de sécurité prend en charge l’emprunt d’identité, appelez la fonction QuerySecurityPackageInfo .

Note Si la fonction ImpersonateSecurityContext échoue, le client n’est pas emprunt d’identité et toutes les demandes clientes suivantes sont effectuées dans le contexte de sécurité du processus qui a appelé la fonction. Si le processus appelant s’exécute en tant que compte privilégié, il peut effectuer des actions que le client n’est pas autorisé à effectuer. Pour éviter les risques de sécurité, le processus appelant doit toujours case activée la valeur de retour. Si la valeur de retour indique que l’appel de fonction a échoué, aucune demande cliente ne doit être exécutée.
 
Toutes les fonctions d’emprunt d’identité, y compris ImpersonateSecurityContext , autorisent l’emprunt d’identité demandé si l’une des opérations suivantes est vraie :
  • Le niveau d’emprunt d’identité demandé du jeton est inférieur à SecurityImpersonation, tel que SecurityIdentification ou SecurityAnonymous.
  • L’appelant dispose du 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 à celle de l’appelant.
Windows XP avec SP1 et versions antérieures : Le privilège SeImpersonatePrivilege n’est pas pris en charge.

Windows XP : Le privilège SeImpersonatePrivilege n’est pas pris en charge tant que Windows XP avec Service Pack 2 (SP2).

Configuration requise

   
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête sspi.h (include Security.h)
Bibliothèque Secur32.lib
DLL Secur32.dll

Voir aussi

AcceptSecurityContext (Général)

QuerySecurityPackageInfo

RevertSecurityContext

Fonctions SSPI