Fonction AcceptSecurityContext (Général)

La fonction AcceptSecurityContext (Général) 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 utilise la fonction InitializeSecurityContext (Général) 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é.

Pour plus d’informations sur l’utilisation de cette fonction avec un fournisseur de support de sécurité (SSP) spécifique, consultez les rubriques suivantes.

Rubrique Description
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 à l’aide du fournisseur de support de sécurité des informations d’identification (CredSSP).
AcceptSecurityContext (Digest) Permet au composant serveur d’une application de transport d’établir un contexte de sécurité entre le serveur et un client distant qui utilise Digest.
AcceptSecurityContext (Kerberos) Permet au composant serveur d’une application de transport d’établir un contexte de sécurité entre le serveur et un client distant qui utilise Kerberos.
AcceptSecurityContext (Negotiate) Permet au composant serveur d’une application de transport d’établir un contexte de sécurité entre le serveur et un client distant qui utilise Negotiate.
AcceptSecurityContext (NTLM) Permet au composant serveur d’une application de transport d’établir un contexte de sécurité entre le serveur et un client distant qui utilise NTLM.
AcceptSecurityContext (Schannel) Permet au composant serveur d’une application de transport d’établir un contexte de sécurité entre le serveur et un client distant qui utilise Schannel.

Syntaxe

SECURITY_STATUS SEC_Entry AcceptSecurityContext(
  _In_opt_    PCredHandle    phCredential,
  _Inout_opt_ PCtxtHandle    phContext,
  _In_opt_    PSecBufferDesc pInput,
  _In_        ULONG          fContextReq,
  _In_        ULONG          TargetDataRep,
  _Inout_opt_ PCtxtHandle    phNewContext,
  _Inout_opt_ PSecBufferDesc pOutput,
  _Out_       PULONG         pfContextAttr,
  _Out_opt_   PTimeStamp     ptsExpiry
);

Paramètres

phCredential[in, optional]

Handle pour les informations d’identification du serveur. Le serveur appelle la fonction AcquireCredentialsHandle (General) avec l’indicateur SECPKG_CRED_INBOUND ou SECPKG_CRED_BOTH défini pour récupérer ce handle.

phContext[in, out]

Pointeur vers une structure CtxtHandle . Lors du premier appel à AcceptSecurityContext (Général), ce pointeur est NULL. Lors des appels suivants, phContext est le handle du contexte partiellement formé qui a été retourné dans le paramètre phNewContext par le premier appel.

Avertissement

N’utilisez pas le même handle de contexte dans les appels simultanés à AcceptSecurityContext (Général). L’implémentation de l’API dans les fournisseurs de services de sécurité n’est pas thread-safe.

pInput[in, optional]

Pointeur vers une structure SecBufferDesc générée par un appel client à InitializeSecurityContext (Général) qui contient le descripteur de mémoire tampon d’entrée.

Lors de l’utilisation du SSP Schannel, 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.

Lors de l’utilisation des SSP Negotiate, Kerberos ou NTLM, les informations de liaison de canal peuvent être spécifiées en passant une structure SecBuffer de type SECBUFFER_CHANNEL_BINDINGS en plus des mémoires tampons générées par l’appel à la fonction InitializeSecurityContext (Général). Les informations de liaison de canal pour la mémoire tampon de liaison de canal peuvent être obtenues en appelant la fonction QueryContextAttributes (Schannel) sur le contexte Schannel utilisé par le client pour l’authentification.

fContextReq[in]

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 être une ou plusieurs des valeurs suivantes.

Valeur Signification
ASC_REQ_ALLOCATE_MEMORY Digest et Schannel allouent des mémoires tampons de sortie pour vous. Lorsque vous avez terminé d’utiliser les mémoires tampons de sortie, libérez-les en appelant la fonction FreeContextBuffer .
ASC_REQ_ALLOW_MISSING_BINDINGS Indique que Digest ne nécessite pas de liaisons de canal pour les canaux internes et externes. Cette valeur est utilisée pour la compatibilité descendante lorsque la prise en charge de la liaison de canal de point de terminaison n’est pas connue.
Cette valeur s’exclut mutuellement avec ASC_REQ_PROXY_BINDINGS.
Cette valeur est prise en charge uniquement par le SSP Digest.
Windows Server 2008, Windows Vista, Windows Server 2003 et Windows XP : Cette valeur n’est pas prise en charge.
ASC_REQ_CONFIDENTIALITY Chiffrer et déchiffrer les messages.
Le fournisseur de services partagés Digest prend en charge cet indicateur pour SASL uniquement.
ASC_REQ_CONNECTION Le contexte de sécurité ne gère pas la mise en forme des messages.
ASC_REQ_DELEGATE Le serveur est autorisé à emprunter l’identité du client. Valide pour Kerberos. Ignorez cet indicateur pour la délégation contrainte.
ASC_REQ_EXTENDED_ERROR Lorsque des erreurs se produisent, la partie distante est avertie.
ASC_REQ_HTTP (0x10000000) Utilisez Digest pour HTTP. Omettez cet indicateur pour utiliser Digest comme mécanisme SASL.
ASC_REQ_INTEGRITY Signer des messages et vérifier les signatures.
Schannel ne prend pas en charge cet indicateur.
ASC_REQ_MUTUAL_AUTH Le client doit fournir un certificat à utiliser pour l’authentification du client.
Cet indicateur est pris en charge uniquement par Schannel.
ASC_REQ_PROXY_BINDINGS Indique que Digest nécessite une liaison de canal.
Cette valeur s’exclut mutuellement avec ASC_REQ_ALLOW_MISSING_BINDINGS.
Cette valeur est prise en charge uniquement par le SSP Digest.
Windows Server 2008, Windows Vista, Windows Server 2003 et Windows XP : Cette valeur n’est pas prise en charge.
ASC_REQ_REPLAY_DETECT Détecter les paquets relus.
ASC_REQ_SEQUENCE_DETECT Détecter les messages reçus hors séquence.
ASC_REQ_STREAM Prise en charge d’une connexion orientée flux.
Cet indicateur est pris en charge uniquement par Schannel.

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éfixés par 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 .

TargetDataRep[in]

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.

Ce paramètre n’est pas utilisé avec Schannel ou Digest SSP. Lorsque vous utilisez Schannel ou Digest SSP, spécifiez zéro pour ce paramètre.

phNewContext[in, out, optional]

Pointeur vers une structure CtxtHandle . Lors du premier appel à AcceptSecurityContext (Général), 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 . phNewContext ne doit jamais être NULL.

pOutput[in, out, optional]

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 (Général). 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 l’utilisation de Schannel, en 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. En outre, l’appelant doit passer une mémoire tampon de type SECBUFFER_ALERT. En sortie, si une alerte est générée, cette mémoire tampon contient des informations sur cette alerte et la fonction échoue.

pfContextAttr[out]

Pointeur vers une variable qui reçoit 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.

ptsTimeStamp[out, optional]

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.

Ce paramètre est défini sur une durée maximale constante. Il n’existe aucun délai d’expiration pour les informations d’identification ou contextes de sécuritéDigest ou lors de l’utilisation du fournisseur de services partagés Digest.

Cette option est facultative lors de l’utilisation du fournisseur de services Schannel. Lorsque la partie distante a fourni un certificat à utiliser pour l’authentification, ce paramètre reçoit l’heure d’expiration de ce certificat. Si aucun certificat n’a été fourni, une valeur de temps maximale est retournée.

Notes

Jusqu’au dernier appel du processus d’authentification, l’heure d’expiration du contexte peut être incorrecte, car des informations supplémentaires seront fournies au cours des étapes ultérieures de la négociation. Par conséquent, ptsTimeStamp doit être NULL jusqu’au dernier appel à la fonction.

Valeur retournée

Cette fonction retourne l’une des valeurs suivantes.

Code/valeur de retourDescription
SEC_E_BAD_BINDINGS
0x80090346L
La fonction a échoué. La stratégie de liaison de canal n’a pas été satisfaite.
SEC_E_INCOMPLETE_MESSAGE
0x80090318L
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 (Général)](acceptsecuritycontext--general.md).
Cette valeur peut être retournée lors de l’utilisation du fournisseur Schannel SSP. Pour plus d’informations sur cette valeur de retour, consultez [AcceptSecurityContext (Schannel)](acceptsecuritycontext--schannel.md).
SEC_E_INSUFFICIENT_MEMORY
0x80090300L
La fonction a échoué. La mémoire disponible est insuffisante pour effectuer l’action demandée.
SEC_E_INTERNAL_ERROR
0x80090304L
La fonction a échoué. Une erreur s’est produite qui n’a pas été mappée à un code d’erreur SSPI.
SEC_E_INVALID_HANDLE
0x80100003L
La fonction a échoué. Le handle passé à la fonction n’est pas valide.
SEC_E_INVALID_TOKEN
0x80090308L
La fonction a échoué. Le jeton passé à la fonction n’est pas valide.
SEC_E_LOGON_DENIED
0x8009030CL
Échec de l’ouverture de session.
SEC_E_NO_AUTHENTICATING_AUTHORITY
0x80090311L
La fonction a échoué. Aucune autorité n’a pu être contactée pour l’authentification. Cela peut être dû aux conditions suivantes :
  • Le nom de domaine de la partie authentifiante est incorrect.
  • Le domaine n’est pas disponible.
  • La relation d’approbation a échoué.
SEC_E_NO_CREDENTIALS
0x8009030EL
La fonction a échoué. Le handle d’informations d’identification spécifié dans le paramètre phCredential n’est pas valide. Cette valeur peut être retournée lors de l’utilisation du fournisseur SSP Digest ou Schannel.
SEC_E_OK
0x000000000L
La fonction a réussi. [*contexte de sécurité*](.. /secgloss/s-gly.md) reçu du client a été accepté. Si un jeton de sortie a été généré par la fonction, il doit être envoyé au processus client.
SEC_E_SECURITY_QOS_FAILED
0x80090332L
La fonction a échoué. Un indicateur d’attribut de contexte non valide a été spécifié dans le paramètre fContextReq . Cette valeur peut être retournée lors de l’utilisation du fournisseur de services partagé Digest.
SEC_E_UNSUPPORTED_FUNCTION
0x80090302L
La fonction a échoué. Un indicateur d’attribut de contexte non valide (ASC_REQ_DELEGATE ou ASC_REQ_PROMPT_FOR_CREDS) a été spécifié dans le paramètre fContextReq . Cette valeur peut être retournée lors de l’utilisation du fournisseur Schannel SSP.
SEC_I_COMPLETE_AND_CONTINUE
0x00090314L
La fonction a réussi. Le serveur doit appeler [CompleteAuthToken](/windows/win32/api/sspi/nf-sspi-completeauthtoken) et passer le jeton de sortie au client. Le serveur attend ensuite un jeton de retour du client, puis effectue un autre appel à [AcceptSecurityContext (Général)](acceptsecuritycontext--general.md).
SEC_I_COMPLETE_NEEDED
0x00090313L
La fonction a réussi. Le serveur doit terminer la génération du message à partir du client, puis appeler la fonction [CompleteAuthToken](/windows/win32/api/sspi/nf-sspi-completeauthtoken).
SEC_I_CONTINUE_NEEDED
0x00090312L
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 (Général)](acceptsecuritycontext--general.md).
STATUS_LOGON_FAILURE
0xC000006DL
Échec de la fonction. La fonction [AcceptSecurityContext (General)](acceptsecuritycontext--general.md) a été appelée après l’établissement du contexte spécifié. Cette valeur peut être retournée lors de l’utilisation du fournisseur de services partagés Digest.

Remarques

La fonction AcceptSecurityContext (General) est l’équivalent serveur de la fonction InitializeSecurityContext (Général).

Lorsque le serveur reçoit une demande d’un client, le serveur utilise le paramètre fContextReq pour spécifier ce qu’il exige de la session. De cette façon, un serveur peut spécifier que les clients doivent être capables d’utiliser une session confidentielle ou vérifiée par l’intégrité, et il peut rejeter les clients qui ne peuvent pas répondre à cette demande. Un serveur peut également ne rien exiger, et tout ce que le client peut fournir ou exiger est retourné dans le paramètre pfContextAttr .

Pour un package qui prend en charge l’authentification à plusieurs étapes, telle que l’authentification mutuelle, la séquence d’appel est la suivante :

  1. Le client transmet un jeton au serveur.
  2. Le serveur appelle AcceptSecurityContext (Général) la première fois, ce qui génère un jeton de réponse qui est ensuite envoyé au client.
  3. Le client reçoit le jeton et le transmet à InitializeSecurityContext (Général). Si InitializeSecurityContext (Général) retourne SEC_E_OK, l’authentification mutuelle est terminée et une session sécurisée peut commencer. Si InitializeSecurityContext (Général) retourne un code d’erreur, la négociation d’authentification mutuelle se termine. Sinon, le jeton de sécurité retourné par InitializeSecurityContext (Général) est envoyé au client et les étapes 2 et 3 sont répétées.
  4. N’utilisez pas la valeur phContext dans les appels simultanés à AcceptSecurityContext (Général). L’implémentation dans les fournisseurs de sécurité n’est pas thread-safe.

Les paramètres fContextReq et pfContextAttr sont des masque de bits qui représentent différents attributs de contexte. Pour obtenir une description des différents attributs, consultez Configuration requise du contexte.

Notes

Le paramètre pfContextAttr est valide sur tout retour réussi, mais uniquement sur le retour final réussi si vous examinez les indicateurs relatifs aux aspects de sécurité du contexte. Les retours intermédiaires peuvent définir, par exemple, l’indicateur ISC_RET_ALLOCATED_MEMORY.

L’appelant est chargé de déterminer si les attributs de contexte finaux sont suffisants. Si, par exemple, la confidentialité (chiffrement) a été demandée, mais n’a pas pu être établie, certaines applications peuvent choisir d’arrêter la connexion immédiatement. Si le contexte de sécurité ne peut pas être établi, le serveur doit libérer le contexte partiellement créé en appelant la fonction DeleteSecurityContext . Pour savoir quand appeler la fonction DeleteSecurityContext , consultez DeleteSecurityContext.

Une fois le contexte de sécurité établi, l’application serveur peut utiliser la fonction QuerySecurityContextToken pour récupérer un handle sur 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.

Configuration requise

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

Voir aussi

Fonctions SSPI

DeleteSecurityContext

InitializeSecurityContext (Général)