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 |
---|---|
|
Le handle passé à la fonction n’est pas valide. |
|
Impossible d’emprunter l’identité du client. |
|
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 .
- 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 : 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 |