Partager via


SspiAcceptSecurityContextAsync, fonction (sspi.h)

La fonction SspiAcceptSecurityContextAsync permet au composant serveur d’une application de transport d’établir de façon asynchrone un contexte de sécurité entre le serveur et un client distant. Le client distant appelle la fonction SspiInitializeSecurityContextAsync pour démarrer de manière asynchrone le processus d’établissement d’un contexte de sécurité.

Notes

Cette fonction sert de équivalent asynchrone à lafonction AcceptSecurityContext.

Syntaxe

SECURITY_STATUS SspiAcceptSecurityContextAsync(
  SspiAsyncContext *AsyncContext,
  PCredHandle      phCredential,
  PCtxtHandle      phContext,
  PSecBufferDesc   pInput,
  unsigned long    fContextReq,
  unsigned long    TargetDataRep,
  PCtxtHandle      phNewContext,
  PSecBufferDesc   pOutput,
  unsigned long    *pfContextAttr,
  PTimeStamp       ptsExpiry
);

Paramètres

AsyncContext

Contexte d’appel asynchrone.

phCredential

Handle pour les informations d’identification du serveur. Pour récupérer ce handle, le serveur appelle la fonction SspiAcquireCredentialsHandleAsync avec l’indicateur SECPKG_CRED_INBOUND ou SECPKG_CRED_BOTH défini.

phContext

Pointeur vers une structure CtxtHandle . Lors du premier appel à SspiAcceptSecurityContextAsync, ce pointeur est NULL. Lors des appels suivants, phContext spécifie le contexte partiellement formé retourné dans le paramètre phNewContext par le premier appel.

pInput

Pointeur vers une structure SecBufferDesc générée par un appel client à SspiInitializeSecurityContextAsync. 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.

fContextReq

Indicateurs de bits qui spécifient les attributs requis par le serveur pour établir le contexte.

Consultez AcceptSecurityContext: fContextReq pour obtenir la liste complète des valeurs de paramètres.

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.

phNewContext

Pointeur vers une structure CtxtHandle . Lors du premier appel à SspiAcceptSecurityContextAsync, 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 .

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 à SspiInitializeSecurityContextAsync. 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é asynchrone. Le jeton doit être envoyé au client. La fonction peut également retourner une mémoire tampon de type SECBUFFER_EXTRA.

pfContextAttr

Pointeur vers un ensemble d’indicateurs de bits qui indiquent les attributs du contexte établi.

Consultez AcceptSecurityContext: pfContextAttr pour obtenir une description des attributs.

ptsExpiry

Pointeur vers une structure TimeStamp qui reçoit l’heure d’expiration du contexte.

Consultez AcceptSecurityContext: ptsExpiry.

Valeur retournée

Retourne SEC_E_OK si la demande asynchrone d’établissement d’un contexte de sécurité a été correctement mise en file d’attente pour exécution. Sinon, elle retourne l’erreur générée lors de la tentative de mise en file d’attente. Pour récupérer les status de l’opération, utilisez SspiGetAsyncCallStatus.

Si le contexte de sécurité reçu du client a été accepté, SspiGetAsyncCallStatus retourne SEC_E_OK ou l’un des codes SSPI du tableau ci-dessous. Sinon, il peut retourner SEC_I_ASYNC_CALL_PENDING si l’appel est toujours en cours, ou l’un des codes d’erreur irrécupérables suivants dans le deuxième tableau ci-dessous.

Code de retour
Description
SEC_E_INCOMPLETE_MESSAGE
0x80090318L
La fonction a réussi. Les données de 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 SspiAcceptSecurityContextAsync.
SEC_I_COMPLETE_AND_CONTINUE
0x00090314L
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 à SspiAcceptSecurityContextAsync.
SEC_I_COMPLETE_NEEDED
0x00090313L
La fonction a réussi. Le serveur doit terminer la génération du message à partir du client avant d’appeler 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 à SspiAcceptSecurityContextAsync.

Codes d’erreur irrécupérables

Code de retour
Description
SEC_E_INSUFFICIENT_MEMORY
0x80090300L
Échec de la fonction. La mémoire disponible est insuffisante pour effectuer l’action demandée.
SEC_E_INTERNAL_ERROR
0x80090304L
Échec de la fonction. Une erreur qui n’a pas été mappée à un code d’erreur SSPI s’est produite.
SEC_E_INVALID_HANDLE
0x80100003L
Échec de la fonction. Le handle passé à la fonction n’est pas valide.
SEC_E_INVALID_TOKEN
0x80090308L
Échec de la fonction. 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
Échec de la fonction. 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 qui s’authentifie est incorrect.
  • Le domaine n’est pas disponible.
  • La relation d’approbation a échoué.
SEC_E_NO_CREDENTIALS
0x8009030EL
Échec de la fonction. Le handle d’informations d’identification spécifié dans le paramètre phCredential n’est pas valide.
SEC_E_UNSUPPORTED_FUNCTION
0x80090302L
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.

Remarques

La fonction SspiAcceptSecurityContextAsync est l’équivalent du serveur de la fonction SspiInitializeSecurityContextAsync .

L’appelant est chargé de déterminer si les attributs de contexte finaux sont suffisants. Par exemple, si 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 SspiDeleteSecurityContextAsync .

Pour plus d’informations, consultez AcceptSecurityContext .

Configuration requise

   
Client minimal pris en charge Windows 10, version 1607 [pilotes en mode noyau uniquement]
Serveur minimal pris en charge Windows Server 2016 [pilotes en mode noyau uniquement]
En-tête sspi.h

Voir aussi

AcceptSecurityContext

Configuration requise pour le contexte

ImpersonateSecurityContext

SspiAcquireCredentialsHandleAsync

SspiDeleteSecurityContextAsync

SspiGetAsyncCallStatus