Fonction AcceptSecurityContext (sspi.h)
La fonction AcceptSecurityContext (CredSSP) permet au composant serveur d’une application de transport d’établir un contexte de sécurité entre le serveur et un client distant. Le client distant appelle la fonction InitializeSecurityContext (CredSSP) pour démarrer le processus d’établissement d’un contexte de sécurité. Le serveur peut exiger un ou plusieurs jetons de réponse du client distant pour terminer l’établissement du contexte de sécurité.
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY AcceptSecurityContext(
[in, optional] PCredHandle phCredential,
[in, optional] PCtxtHandle phContext,
[in, optional] PSecBufferDesc pInput,
[in] unsigned long fContextReq,
[in] unsigned long TargetDataRep,
[in, out, optional] PCtxtHandle phNewContext,
[in, out, optional] PSecBufferDesc pOutput,
[out] unsigned long *pfContextAttr,
[out, optional] PTimeStamp ptsExpiry
);
[in, optional] phCredential
Handle des informations d’identification du serveur. Pour récupérer ce handle, le serveur appelle la fonction AcquireCredentialsHandle (CredSSP) avec l’indicateur SECPKG_CRED_INBOUND ou SECPKG_CRED_BOTH.
[in, optional] phContext
Pointeur vers une structure CtxtHandle . Lors du premier appel à AcceptSecurityContext (CredSSP), ce pointeur a la valeur NULL. Lors des appels suivants, phContext spécifie le contexte partiellement formé retourné dans le paramètre phNewContext par le premier appel.
[in, optional] pInput
Pointeur vers une structure SecBufferDesc générée par un appel client à InitializeSecurityContext (CredSSP). La structure contient le descripteur de mémoire tampon d’entrée.
La première mémoire tampon doit être de type SECBUFFER_TOKEN et contenir le jeton de sécurité reçu du client. La deuxième mémoire tampon doit être de type SECBUFFER_EMPTY.
[in] fContextReq
-Indicateurs de bits qui spécifient les attributs requis par le serveur pour établir le contexte. Les indicateurs de bits peuvent être combinés à l’aide d’opérations OR au niveau du bit. Ce paramètre peut prendre une ou plusieurs des valeurs suivantes.
Valeur | Signification |
---|---|
|
Le fournisseur de support de sécurité des informations d’identification (CredSSP) alloue des mémoires tampons de sortie. Lorsque vous avez terminé d’utiliser les mémoires tampons de sortie, libérez-les en appelant la fonction FreeContextBuffer . |
|
Le contexte de sécurité ne gère pas la mise en forme des messages. |
|
Le serveur est autorisé à emprunter l’identité du client. Ignorez cet indicateur pour la délégation contrainte. |
|
Lorsque des erreurs se produisent, la partie distante est avertie. |
|
Détecter les paquets relus. |
|
Détecter les messages reçus hors séquence. |
|
Prise en charge d’une connexion orientée flux. |
Pour connaître les indicateurs d’attribut possibles et leurs significations, consultez Exigences de contexte. Les indicateurs utilisés pour ce paramètre sont précédés d’ASC_REQ, par exemple, ASC_REQ_DELEGATE.
Les attributs demandés peuvent ne pas être pris en charge par le client. Pour plus d’informations, consultez le paramètre pfContextAttr .
[in] TargetDataRep
Représentation des données, telle que l’ordre des octets, sur la cible. Ce paramètre peut être SECURITY_NATIVE_DREP ou SECURITY_NETWORK_DREP.
[in, out, optional] phNewContext
Pointeur vers une structure CtxtHandle . Lors du premier appel à AcceptSecurityContext (CredSSP), ce pointeur reçoit le nouveau handle de contexte. Lors des appels suivants, phNewContext peut être identique au handle spécifié dans le paramètre phContext .
[in, out, optional] pOutput
Pointeur vers une structure SecBufferDesc qui contient le descripteur de mémoire tampon de sortie. Cette mémoire tampon est envoyée au client pour entrée dans des appels supplémentaires à InitializeSecurityContext (CredSSP). Une mémoire tampon de sortie peut être générée même si la fonction retourne SEC_E_OK. Toute mémoire tampon générée doit être renvoyée à l’application cliente.
Lors de la sortie, cette mémoire tampon reçoit un jeton pour le contexte de sécurité. Le jeton doit être envoyé au client. La fonction peut également retourner une mémoire tampon de type SECBUFFER_EXTRA.
[out] pfContextAttr
Pointeur vers un ensemble d’indicateurs de bits qui indiquent les attributs du contexte établi. Pour obtenir une description des différents attributs, consultez Configuration requise du contexte. Les indicateurs utilisés pour ce paramètre sont précédés d’ASC_RET, par exemple, ASC_RET_DELEGATE.
Ne case activée pas pour les attributs liés à la sécurité tant que l’appel de fonction final n’est pas retourné. Les indicateurs d’attribut non liés à la sécurité, tels que l’indicateur ASC_RET_ALLOCATED_MEMORY, peuvent être vérifiés avant le retour final.
[out, optional] ptsExpiry
Pointeur vers une structure TimeStamp qui reçoit l’heure d’expiration du contexte. Nous recommandons que le package de sécurité retourne toujours cette valeur en heure locale.
Cette fonction retourne l’une des valeurs suivantes.
Code/valeur de retour | Description |
---|---|
|
La fonction a réussi. Les données dans la mémoire tampon d’entrée sont incomplètes. L’application doit lire des données supplémentaires à partir du client et appeler à nouveau AcceptSecurityContext (CredSSP). |
|
La fonction a échoué. La mémoire disponible est insuffisante pour effectuer l’action demandée. |
|
La fonction a échoué. Une erreur s’est produite qui n’a pas été mappée à un code d’erreur SSPI. |
|
La fonction a échoué. Le handle passé à la fonction n’est pas valide. |
|
La fonction a échoué. Le jeton passé à la fonction n’est pas valide. |
|
Échec de l’ouverture de session. |
|
La fonction a échoué. Aucune autorité n’a pu être contactée pour l’authentification. Cela peut être dû aux conditions suivantes :
|
|
La fonction a échoué. Le handle d’informations d’identification spécifié dans le paramètre phCredential n’est pas valide. |
|
La fonction a réussi. Le contexte de sécurité reçu du client a été accepté. Si la fonction a généré un jeton de sortie, le jeton doit être envoyé au processus client. |
|
La fonction a échoué. Le paramètre fContextReq a spécifié un indicateur d’attribut de contexte (ASC_REQ_DELEGATE ou ASC_REQ_PROMPT_FOR_CREDS) non valide. |
|
La fonction a réussi. Le serveur doit appeler CompleteAuthToken et passer le jeton de sortie au client. Le serveur doit ensuite attendre un jeton de retour du client avant d’effectuer un autre appel à AcceptSecurityContext (CredSSP). |
|
La fonction a réussi. Le serveur doit terminer la génération du message à partir du client avant d’appeler CompleteAuthToken. |
|
La fonction a réussi. Le serveur doit envoyer le jeton de sortie au client et attendre un jeton retourné. Le jeton retourné doit être passé dans pInput pour un autre appel à AcceptSecurityContext (CredSSP). |
La fonction AcceptSecurityContext (CredSSP) est l’équivalent du serveur de la fonction InitializeSecurityContext (CredSSP).
Lorsque le serveur reçoit une requête d’un client, il utilise le paramètre fContextReq pour spécifier ce qu’il exige de la session. De cette façon, un serveur peut exiger que les clients soient capables d’utiliser une session confidentielle ou vérifiée par l’intégrité ; elle peut rejeter les clients qui ne peuvent pas répondre à cette demande. Sinon, un serveur ne peut rien exiger ; tout ce que le client a besoin ou peut fournir est retourné dans le paramètre pfContextAttr .
Les paramètres fContextReq et pfContextAttr sont des masques de bits qui représentent différents attributs de contexte. Pour obtenir une description des différents attributs, consultez Configuration requise du contexte.
Une fois le contexte de sécurité établi, l’application serveur peut utiliser la fonction QuerySecurityContextToken pour récupérer un handle vers le compte d’utilisateur auquel le certificat client a été mappé. En outre, le serveur peut utiliser la fonction ImpersonateSecurityContext pour emprunter l’identité de l’utilisateur.
Client minimal pris en charge | Windows Vista [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2008 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | sspi.h (include Security.h) |
Bibliothèque | Secur32.lib |
DLL | Secur32.dll |