Fonction LsaLogonUser (ntsecapi.h)

La fonction LsaLogonUser authentifie les données d’ouverture de session d’un principal de sécurité à l’aide des informations d’identification stockées.

Si l’authentification réussit, cette fonction crée une session d’ouverture de session et retourne un jeton utilisateur.

Lorsqu’un nouveau ticket d’octroi de ticket (TGT) est obtenu à l’aide de nouvelles informations d’identification de certificat, tous les TGT et les tickets de service du système sont vidés. Tous les tickets de service utilisateur qui sont d’une identité composée sont également purgés.

Syntaxe

NTSTATUS LsaLogonUser(
  [in]           HANDLE              LsaHandle,
  [in]           PLSA_STRING         OriginName,
  [in]           SECURITY_LOGON_TYPE LogonType,
  [in]           ULONG               AuthenticationPackage,
  [in]           PVOID               AuthenticationInformation,
  [in]           ULONG               AuthenticationInformationLength,
  [in, optional] PTOKEN_GROUPS       LocalGroups,
  [in]           PTOKEN_SOURCE       SourceContext,
  [out]          PVOID               *ProfileBuffer,
  [out]          PULONG              ProfileBufferLength,
  [out]          PLUID               LogonId,
  [out]          PHANDLE             Token,
  [out]          PQUOTA_LIMITS       Quotas,
  [out]          PNTSTATUS           SubStatus
);

Paramètres

[in] LsaHandle

Handle obtenu à partir d’un appel précédent à LsaRegisterLogonProcess.

L’appelant doit avoir SeTcbPrivilege uniquement si une ou plusieurs des conditions suivantes sont remplies :

  • Un package de sous-authentification est utilisé.
  • KERB_S4U_LOGON est utilisé et l’appelant demande un jeton d’emprunt d’identité.
  • Le paramètre LocalGroups n’a pas la valeur NULL.
Si SeTcbPrivilege n’est pas obligatoire, appelez LsaConnectUntrusted pour obtenir le handle.

[in] OriginName

Chaîne qui identifie l’origine de la tentative d’ouverture de session. Pour plus d'informations, consultez la section Notes.

[in] LogonType

Valeur de l’énumération SECURITY_LOGON_TYPE qui spécifie le type d’ouverture de session demandé. Si LogonType est Interactif ou Batch, un jeton principal est généré pour représenter le nouvel utilisateur. Si LogonType est Network, un jeton d’emprunt d’identité est généré.

[in] AuthenticationPackage

Identificateur du package d’authentification à utiliser pour l’authentification. Vous pouvez obtenir cette valeur en appelant LsaLookupAuthenticationPackage.

[in] AuthenticationInformation

Pointeur vers une mémoire tampon d’entrée qui contient des informations d’authentification, telles que le nom d’utilisateur et le mot de passe. Le format et le contenu de cette mémoire tampon sont déterminés par le package d’authentification.

Ce paramètre peut être l’une des structures de mémoire tampon d’entrée suivantes pour les packages d’authentification MSV1_0 et Kerberos.

Valeur Signification
MSV1_0_INTERACTIVE_LOGON
MSV1_0
Authentification d’une ouverture de session utilisateur interactive.

Les membres LogonDomainName, UserName et Password de la structure MSV1_0_INTERACTIVE_LOGON doivent pointer vers des mémoires tampons contiguës à la structure elle-même. La valeur du paramètre AuthenticationInformationLength doit prendre en compte la longueur de ces mémoires tampons.

KERB_INTERACTIVE_LOGON
Kerberos
Authentification d’une ouverture de session utilisateur interactive.
KERB_TICKET_LOGON
Kerberos
Authentification d’un utilisateur lors de la connexion réseau initiale ou de la déconnexion.
KERB_TICKET_UNLOCK_LOGON
Kerberos
Authentification d’un utilisateur lors de l’actualisation du ticket, une variante de l’ouverture de session de déverrouillage de la station de travail normale.
KERB_CERTIFICATE_LOGON
Kerberos
Authentification d’un utilisateur à l’aide d’une ouverture de session intelligente interactive carte.
KERB_CERTIFICATE_S4U_LOGON
Kerberos
Authentification d’un utilisateur à l’aide d’un service pour l’ouverture de session utilisateur (S4U).
KERB_CERTIFICATE_UNLOCK_LOGON
Kerberos
Authentification d’un utilisateur pour déverrouiller une station de travail qui a été verrouillée pendant une session d’ouverture de session de carte intelligente interactive.
KERB_SMARTCARD_LOGON
Kerberos
Authentification d’une ouverture de session intelligente carte utilisateur à l’aide de LOGON32_PROVIDER_WINNT50 ou de LOGON32_PROVIDER_DEFAULT.
KERB_SMARTCARD_UNLOCK_LOGON
Kerberos
Authentification d’un utilisateur pour déverrouiller une station de travail qui a été verrouillée pendant une session de connexion intelligente carte.
KERB_S4U_LOGON
Kerberos
Authentification d’un utilisateur à l’aide de requêtes clientes S4U. Pour la délégation contrainte, un appel à LsaLogonUser n’est pas nécessaire si le client s’est connecté à l’aide d’un package d’authentification en mode LSA. Sur les systèmes d’exploitation Windows, ceux-ci incluent Kerberos, NTLM, Secure Channel et Digest. Pour que cet appel réussisse, les éléments suivants doivent être vrais :
  • L’appelant doit être un compte de domaine (cela inclut LOCAL_SYSTEM si l’ordinateur est membre du domaine).
  • Si vous utilisez un compte de service, SeTcbPrivilege doit être défini sur l’ordinateur local pour obtenir un jeton d’emprunt d’identité. Sinon, le jeton d’identité est utilisé.
  • L’appelant doit être membre de l’accès compatible pré-Windows 2000 ou disposer d’un accès en lecture aux appartenances au groupe du client. L’appartenance au groupe Accès d’autorisation Windows garantit l’accès en lecture à l’appartenance au groupe du client. Pour plus d’informations sur la configuration du groupe d’accès d’autorisation Windows, consultez la Base de connaissances Microsoft.
Les membres ClientUpn et ClientRealm de la structure KERB_S4U_LOGON doivent pointer vers des mémoires tampons contiguës à la structure elle-même. La valeur du paramètre AuthenticationInformationLength doit prendre en compte la longueur de ces mémoires tampons.
MSV1_0_LM20_LOGON
MSV1_0
Traitement de la deuxième moitié d’une ouverture de session de protocole NTLM 2.0. La première moitié de ce type d’ouverture de session est effectuée en appelant LsaCallAuthenticationPackage avec le message MsV1_0Lm20ChallengeRequest . Pour plus d’informations, consultez la description des MsV1_0Lm20ChallengeRequest dans MSV1_0_PROTOCOL_MESSAGE_TYPE.

Ce type d’ouverture de session peut utiliser un package de sous-authentification.

MSV1_0_SUBAUTH_LOGON
MSV1_0
Authentification d’un utilisateur avec une sous-authentification.
 

Pour plus d’informations sur la mémoire tampon utilisée par d’autres packages d’authentification, consultez la documentation relative à ces packages d’authentification.

[in] AuthenticationInformationLength

Longueur, en octets, de la mémoire tampon AuthenticationInformation .

[in, optional] LocalGroups

Liste d’identificateurs de groupe supplémentaires à ajouter au jeton de l’utilisateur authentifié. Ces identificateurs de groupe seront ajoutés, ainsi que le groupe par défaut WORLD et le groupe de types d’ouverture de session (Interactif, Batch ou Réseau), qui sont automatiquement inclus dans chaque jeton utilisateur.

[in] SourceContext

Une structure TOKEN_SOURCE qui identifie le module source (par exemple, le gestionnaire de session) et le contexte qui peut être utile à ce module. Ces informations sont incluses dans le jeton utilisateur et peuvent être récupérées en appelant GetTokenInformation.

[out] ProfileBuffer

Pointeur vers un pointeur void qui reçoit l’adresse d’une mémoire tampon de sortie qui contient des informations d’authentification, telles que l’interpréteur de commandes d’ouverture de session et le répertoire de base.

Ce paramètre peut être l’une des structures de mémoire tampon de sortie suivantes pour les packages d’authentification MSV1_0 et Kerberos.

Valeur Signification
MSV1_0_INTERACTIVE_PROFILE
MSV1_0
Profil d’ouverture de session d’un utilisateur interactif.
KERB_TICKET_PROFILE
Kerberos
Sortie d’authentification d’ouverture de session, de déconnexion et d’actualisation de ticket.
MSV1_0_LM20_LOGON
MSV1_0
Sortie lors du traitement de la deuxième moitié d’une ouverture de session du protocole NTLM 2.0.
MSV1_0_LM20_LOGON_PROFILE
MSV1_0
Sortie lors de l’utilisation de l’authentification avec sous-authentification.
 

Pour plus d’informations sur la mémoire tampon utilisée par d’autres packages d’authentification, consultez la documentation relative à ce package d’authentification.

Lorsque cette mémoire tampon n’est plus nécessaire, l’application appelante doit libérer cette mémoire tampon en appelant la fonction LsaFreeReturnBuffer .

[out] ProfileBufferLength

Pointeur vers un ULONG qui reçoit la longueur, en octets, de la mémoire tampon de profil retournée.

[out] LogonId

Pointeur vers une mémoire tampon qui reçoit un LUID qui identifie de manière unique la session d’ouverture de session. Ce LUID est attribué par le contrôleur de domaine qui a authentifié les informations de connexion.

[out] Token

Pointeur vers un handle qui reçoit le nouveau jeton utilisateur créé pour cette session. Une fois que vous avez terminé d’utiliser le jeton, relâchez-le en appelant la fonction CloseHandle .

[out] Quotas

Lorsqu’un jeton principal est retourné, ce paramètre reçoit une structure QUOTA_LIMITS qui contient les limites de quota de processus attribuées au processus initial de l’utilisateur nouvellement connecté.

[out] SubStatus

Si l’ouverture de session a échoué en raison de restrictions de compte, ce paramètre reçoit des informations sur la raison de l’échec de l’ouverture de session. Cette valeur est définie uniquement si les informations de compte de l’utilisateur sont valides et si l’ouverture de session est rejetée.

Ce paramètre peut être l’une des valeurs SubStatus suivantes pour le package d’authentification MSV1_0.

Valeur Signification
STATUS_INVALID_LOGON_HOURS
Le compte d’utilisateur a des restrictions de temps et ne peut pas être utilisé pour se connecter pour le moment.
STATUS_INVALID_WORKSTATION
Le compte d’utilisateur a des restrictions de station de travail et ne peut pas être utilisé pour se connecter à partir de la station de travail actuelle.
STATUS_PASSWORD_EXPIRED
Le mot de passe du compte d’utilisateur a expiré.
STATUS_ACCOUNT_DISABLED
Le compte d’utilisateur est actuellement désactivé et ne peut pas être utilisé pour ouvrir une session.

Valeur retournée

Si la fonction réussit, la fonction retourne STATUS_SUCCESS.

Si la fonction échoue, elle retourne un code NTSTATUS , qui peut être l’une des valeurs suivantes.

Valeur Description
STATUS_QUOTA_EXCEEDED
Le quota de mémoire de l’appelant est insuffisant pour allouer la mémoire tampon de sortie retournée par le package d’authentification.
STATUS_ACCOUNT_RESTRICTION
Le compte d’utilisateur et le mot de passe sont légitimes, mais le compte d’utilisateur a une restriction qui empêche l’ouverture de session pour le moment. Pour plus d’informations, consultez la valeur stockée dans le paramètre SubStatus .
STATUS_BAD_VALIDATION_CLASS
Les informations d’authentification fournies ne sont pas reconnues par le package d’authentification.
STATUS_LOGON_FAILURE
La tentative d’ouverture de session a échoué. La raison de l’échec n’est pas spécifiée, mais les raisons courantes incluent des noms d’utilisateur mal orthographiés et des mots de passe mal orthographiés.
STATUS_NO_LOGON_SERVERS
Aucun contrôleur de domaine n’est disponible pour traiter la demande d’authentification.
STATUS_NO_SUCH_PACKAGE
Le package d’authentification spécifié n’est pas reconnu par la LSA.
STATUS_PKINIT_FAILURE
Le client Kerberos a reçu un certificat KDC non valide. Pour l’ouverture de session de l’appareil, une validation KDC stricte est requise, de sorte que le KDC doit avoir des certificats qui utilisent le modèle « Authentification Kerberos » ou équivalent. En outre, le certificat KDC peut être expiré, révoqué ou le client est sous l’attaque active de l’envoi de requêtes au serveur incorrect.
STATUS_PKINIT_CLIENT_FAILURE
Le client Kerberos utilise un certificat système non valide. Pour l’ouverture de session de l’appareil, il doit y avoir un nom DNS. En outre, le certificat système peut avoir expiré ou le certificat incorrect peut être sélectionné.
 

Pour plus d’informations, consultez Valeurs de retour de la fonction de stratégie LSA.

La fonction LsaNtStatusToWinError convertit un code NTSTATUS en code d’erreur Windows.

Remarques

Le paramètre OriginName doit spécifier des informations significatives. Par exemple, il peut contenir « TTY1 » pour indiquer le terminal 1 ou « NTLM - nœud distant JAZZ » pour indiquer une ouverture de session réseau qui utilise NTLM via un nœud distant appelé « JAZZ ».

Vous devez appeler LsaLogonUser séparément pour mettre à jour les informations d’identification de l’appareil PKINIT pour LOCAL_SYSTEM et NETWORK_SERVICE. En l’absence d’informations d’identification d’appareil PKINIT, un appel réussi n’effectue aucune opération. Lorsqu’il existe des informations d’identification d’appareil PKINIT, un appel réussi nettoie les informations d’identification de l’appareil PKINIT afin que seules les informations d’identification du mot de passe restent.

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]
Plateforme cible Windows
En-tête ntsecapi.h
Bibliothèque Secur32.lib
DLL Secur32.dll

Voir aussi

Autorisation de l’accès anonyme

LsaCallAuthenticationPackage

LsaFreeReturnBuffer

LsaLookupAuthenticationPackage