Fonction AcceptSecurityContext (CredSSP)
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é.
Syntaxe
SECURITY_STATUS SEC_ENTRY AcceptSecurityContext(
_In_opt_ PCredHandle phCredential,
_In_opt_ PCtxtHandle phContext,
_In_opt_ PSecBufferDesc pInput,
_In_ unsigned long fContextReq,
_In_ unsigned long TargetDataRep,
_Inout_opt_ PCtxtHandle phNewContext,
_Inout_opt_ PSecBufferDesc pOutput,
_Out_ unsigned long *pfContextAttr,
_Out_opt_ PTimeStamp ptsExpiry
);
Paramètres
phCredential [in, optional]
Handle pour les 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 défini.
phContext [in, optional]
Pointeur vers une structure CtxtHandle. Lors du premier appel à AcceptSecurityContext (CredSSP), ce pointeur est NULL
. Lors des appels suivants, phContext spécifie le contexte partiellement formé renvoyé 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 (CredSSP). 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 (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.
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 prendre l’une ou plusieurs des valeurs suivantes.
Valeur | Signification |
---|---|
ASC_REQ_ALLOCATE_MEMORY | Le CredSSP (Credential Security Support Provider) 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. |
ASC_REQ_CONNECTION | Le contexte de sécurité ne gère pas les messages de mise en forme. |
ASC_REQ_DELEGATE | Ce serveur est autorisé à emprunter l’identité du client. 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_REPLAY_DETECT | Détecter les paquets relus. |
ASC_REQ_SEQUENCE_DETECT | Détecter les messages reçus hors séquence. |
ASC_REQ_STREAM | Prendre en charge une connexion orientée flux. |
Pour connaître les indicateurs d’attribut possibles et leurs significations, consultez Conditions requises pour le contexte. Les indicateurs utilisés pour ce paramètre sont précédé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 d’octets, sur la cible. Ce paramètre peut être SECURITY_NATIVE_DREP ou SECURITY_NETWORK_DREP.
phNewContext [in, out, optional]
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 le même que le handle spécifié dans le paramètre phContext.
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 une 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 renvoie SEC_E_OK. Toute mémoire tampon générée doit être renvoyée à l’application cliente.
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 renvoyer une mémoire tampon de type SECBUFFER_EXTRA.
pfContextAttr [out]
Pointeur vers un ensemble d’indicateurs de bits qui indiquent les attributs du contexte établi. Pour obtenir une description des différents attributs, consultez Conditions requises pour le contexte. Les indicateurs utilisés pour ce paramètre sont précédés par ASC_RET, par exemple, ASC_RET_DELEGATE.
Ne vérifiez pas les attributs liés à la sécurité tant que l’appel de fonction final n’a pas renvoyé une réussite. Les indicateurs d’attributs non liés à la sécurité, comme l’indicateur ASC_RET_ALLOCATED_MEMORY, peuvent être vérifiés avant le renvoi final.
ptsExpiry [out, optional]
Pointeur vers une structure TimeStamp qui reçoit l’heure d’expiration du contexte. Nous recommandons que le package de sécurité renvoie toujours cette valeur en heure locale.
Remarque
Jusqu’au dernier appel de la procédure d’authentification, le délai d’expiration du contexte peut être incorrect, 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’à ce que le dernier appel à la fonction.
Valeur renvoyée
Cette fonction renvoie l’une des valeurs suivantes.
Valeur/code de renvoi | 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 les données supplémentaires à partir du client et appeler à nouveau AcceptSecurityContext (CredSSP). |
SEC_E_INSUFFICIENT_MEMORY 0x80090300L |
La fonction a échoué. La mémoire disponible est insuffisante pour terminer l’action demandée. |
SEC_E_INTERNAL_ERROR 0x80090304L |
La fonction a échoué. Une erreur non mappée à un code d’erreur SSPI s’est produite. |
SEC_E_INVALID_HANDLE 0x80100003L |
La fonction a échoué. Le handle transmis à la fonction n’est pas valide. |
SEC_E_INVALID_TOKEN 0x80090308L |
La fonction a échoué. Le jeton transmis à la fonction n’est pas valide. |
SEC_E_LOGON_DENIED 0x8009030CL |
L’ouverture de session a échoué. |
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 :
|
SEC_E_NO_CREDENTIALS 0x8009030EL |
La fonction a échoué. Le handle des informations d’identification spécifié dans le paramètre phCredential n’est pas valide. |
SEC_E_OK 0x00000000L |
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, il doit être envoyé au processus client. |
SEC_E_UNSUPPORTED_FUNCTION 0x80090302L |
La fonction a échoué. Le paramètre fContextReq spécifiait un indicateur d’attribut de contexte (ASC_REQ_DELEGATE ou ASC_REQ_PROMPT_FOR_CREDS) qui n’était pas valide. |
SEC_I_COMPLETE_AND_CONTINUE 0x00090314L |
La fonction a réussi. Le serveur doit appeler CompleteAuthToken et transmettre 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). |
SEC_I_COMPLETE_NEEDED 0x00090313L |
La fonction a réussi. Le serveur doit terminer la génération du message 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 le renvoi d’un jeton. Le jeton retourné doit être transmis dans pInput pour un autre appel à AcceptSecurityContext (CredSSP). |
Notes
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ètres fContextReq pour spécifier ce qu’il exige pour la session. Ainsi, un serveur peut exiger que les clients soient capables d’utiliser une session confidentielle ou une session avec son intégrité vérifiée. Il peut rejeter les clients qui ne peuvent pas répondre à cette demande. Par ailleurs, un serveur peut ne rien demander. Ce que le client requiert ou peut fournir est renvoyé dans le paramètre pfContextAttr.
Les paramètres fContextReq et pfContextAttr sont des masques de bits qui représentent divers attributs de contexte. Pour obtenir une description des différents attributs, consultez Conditions requises pour le contexte.
Remarque
Bien que le paramètre pfContextAttr soit valable pour tout renvoi réussi, vous devez seulement examiner les indicateurs relatifs aux aspects de sécurité du contexte lors du dernier renvoi réussi. Les renvois intermédiaires peuvent définir, par exemple, l’indicateur ISC_RET_ALLOCATED_MEMORY.
Il est de la responsabilité de l’appelant de déterminer si les attributs de contexte finaux sont suffisants. Par exemple, si la confidentialité (cryptage) a été demandée mais n’a pas pu être établie, certaines applications peuvent choisir de fermer 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 en savoir plus sur le moment où 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 dans 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.
Spécifications
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows�Vista [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server�2008 [applications de bureau uniquement] |
En-tête | Sspi.h (inclure Security.h) |
Bibliothèque | Secur32.lib |
DLL | Secur32.dll |