LsaLogonUser, fonction (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 tickets de service du système sont purgé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 un ou plusieurs des éléments suivants sont vrais :

  • 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’est pas NULL.
Si SeTcbPrivilege n’est pas requis, 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 l’ouverture de session ou de la déconnexion réseau initiale.
KERB_TICKET_UNLOCK_LOGON
Kerberos
Authentification d’un utilisateur lors de l’actualisation du ticket, variante de l’ouverture de session normale de la station de travail.
KERB_CERTIFICATE_LOGON
Kerberos
Authentification d’un utilisateur à l’aide d’une ouverture de session interactive par carte à puce.
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 verrouillée pendant une session d’ouverture de session interactive par carte à puce.
KERB_SMARTCARD_LOGON
Kerberos
Authentification d’une connexion par carte à puce 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 verrouillée pendant une session d’ouverture de session de carte à puce.
KERB_S4U_LOGON
Kerberos
Authentification d’un utilisateur à l’aide de demandes de client 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, le compte doit avoir seTcbPrivilege 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 pré-Windows 2000 compatible ou avoir un accès en lecture aux appartenances au groupe du client. L’appartenance au groupe d’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 WORLD par défaut et le groupe de types d’ouverture de session (Interactive, Batch ou Network), qui sont automatiquement inclus dans chaque jeton utilisateur.

[in] SourceContext

Structure TOKEN_SOURCE qui identifie le module source (par exemple, le gestionnaire de sessions) 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
Connexion, déconnexion et sortie de l’authentification de l’actualisation des tickets.
MSV1_0_LM20_LOGON
MSV1_0
Sortie lors du traitement de la deuxième moitié d’une ouverture de session de protocole NTLM 2.0.
MSV1_0_LM20_LOGON_PROFILE
MSV1_0
Sortie lors de l’utilisation de l’authentification 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 à 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 façon unique la session d’ouverture de session. Ce LUID est attribué par le contrôleur de domaine qui a authentifié les informations d’ouverture de session.

[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 affecté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 pour laquelle l’ouverture de session a échoué. Cette valeur est définie uniquement si les informations de compte de l’utilisateur sont valides et que 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 l’instant.
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 active.
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 se connecter.

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 l’instant. 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 classiques 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 l’authentification LSA.
STATUS_PKINIT_FAILURE
Le client Kerberos a reçu un certificat KDC qui n’est pas valide. Pour l’ouverture de session de l’appareil, une validation de KDC stricte est requise. Par conséquent, 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 demandes au serveur incorrect.
STATUS_PKINIT_CLIENT_FAILURE
Le client Kerberos utilise un certificat système qui n’est pas valide. Pour l’ouverture de session de l’appareil, il doit y avoir un nom DNS. En outre, le certificat système peut être expiré ou le mauvais 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.

Notes

Le paramètre OriginName doit spécifier des informations significatives. Par exemple, il peut contenir « TTY1 » pour indiquer le terminal 1 ou « NTLM - remote node 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

   
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