Funzione LsaLogonUser (ntsecapi.h)

La funzione LsaLogonUser autentica i dati di accesso di un'entità sicurezza usando le informazioni sulle credenziali archiviate.

Se l'autenticazione ha esito positivo, questa funzione crea una nuova sessione di accesso e restituisce un token utente.

Quando viene ottenuto un nuovo ticket di concessione ticket (TGT) usando nuove credenziali del certificato, tutti i TGT e i ticket di servizio del sistema vengono eliminati. Tutti i ticket di servizio utente che sono di un'identità composta vengono eliminati anche.

Sintassi

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
);

Parametri

[in] LsaHandle

Handle ottenuto da una chiamata precedente a LsaRegisterLogonProcess.

Il chiamante deve avere SeTcbPrivilege solo se uno o più dei seguenti è true:

  • Viene usato un pacchetto di sottoutenticazione.
  • KERB_S4U_LOGON viene usato e il chiamante richiede un token di rappresentazione.
  • Il parametro LocalGroups non è NULL.
Se SeTcbPrivilege non è obbligatorio, chiamare LsaConnectUntrusted per ottenere l'handle.

[in] OriginName

Stringa che identifica l'origine del tentativo di accesso. Per altre informazioni, vedere la sezione Osservazioni.

[in] LogonType

Valore dell'enumerazione SECURITY_LOGON_TYPE che specifica il tipo di accesso richiesto. Se LogonType è Interattivo o Batch, viene generato un token primario per rappresentare il nuovo utente. Se LogonType è Network, viene generato un token di rappresentazione.

[in] AuthenticationPackage

Identificatore del pacchetto di autenticazione da usare per l'autenticazione. È possibile ottenere questo valore chiamando LsaLookupAuthenticationPackage.

[in] AuthenticationInformation

Puntatore a un buffer di input contenente informazioni di autenticazione, ad esempio nome utente e password. Il formato e il contenuto di questo buffer sono determinati dal pacchetto di autenticazione.

Questo parametro può essere una delle strutture del buffer di input seguenti per i pacchetti di autenticazione MSV1_0 e Kerberos.

Valore Significato
MSV1_0_INTERACTIVE_LOGON
MSV1_0
Autenticazione di un accesso utente interattivo.

I membri LogonDomainName, UserName e Password della struttura MSV1_0_INTERACTIVE_LOGON devono puntare ai buffer in memoria contigui alla struttura stessa. Il valore del parametro AuthenticationInformationLength deve tenere conto della lunghezza di questi buffer.

KERB_INTERACTIVE_LOGON
Kerberos
Autenticazione di un accesso utente interattivo.
KERB_TICKET_LOGON
Kerberos
Autenticazione di un utente nell'accesso di rete iniziale o disconnessione.
KERB_TICKET_UNLOCK_LOGON
Kerberos
Autenticazione di un utente durante l'aggiornamento del ticket, una variante dell'accesso normale dello sblocco della workstation.
KERB_CERTIFICATE_LOGON
Kerberos
Autenticazione di un utente usando un accesso interattivo della smart card.
KERB_CERTIFICATE_S4U_LOGON
Kerberos
Autenticazione di un utente che usa un servizio per l'accesso dell'utente (S4U).
KERB_CERTIFICATE_UNLOCK_LOGON
Kerberos
Autenticazione di un utente per sbloccare una workstation bloccata durante una sessione di accesso interattiva della smart card.
KERB_SMARTCARD_LOGON
Kerberos
Autenticazione di un accesso a smart card utente tramite LOGON32_PROVIDER_WINNT50 o LOGON32_PROVIDER_DEFAULT.
KERB_SMARTCARD_UNLOCK_LOGON
Kerberos
Autenticazione di un utente per sbloccare una workstation bloccata durante una sessione di accesso alla smart card.
KERB_S4U_LOGON
Kerberos
Autenticazione di un utente tramite richieste client S4U. Per la delega vincolata, una chiamata a LsaLogonUser non è necessaria se il client ha eseguito l'accesso usando un pacchetto di autenticazione in modalità LSA. Nei sistemi operativi Windows, questi includono Kerberos, NTLM, Secure Channel e Digest. Per la riuscita della chiamata, è necessario che sia true quanto segue:
  • Il chiamante deve essere un account di dominio, che include LOCAL_SYSTEM se il computer è un membro del dominio.
  • Se si usa un account del servizio, l'account deve avere SeTcbPrivilege impostato nel computer locale per ottenere un token di rappresentazione. In caso contrario, viene usato il token di identità.
  • Il chiamante deve essere membro dell'accesso compatibile pre-Windows 2000 o avere accesso in lettura alle appartenenze di gruppo del client. L'appartenenza al gruppo Accesso autorizzazione di Windows garantisce l'accesso in lettura all'appartenenza al gruppo del client. Per informazioni su come configurare il gruppo di accesso alle autorizzazioni di Windows, vedere Microsoft Knowledge Base.
I membri ClientUpn e ClientRealm della struttura KERB_S4U_LOGON devono puntare ai buffer in memoria contigui alla struttura stessa. Il valore del parametro AuthenticationInformationLength deve tenere conto della lunghezza di questi buffer.
MSV1_0_LM20_LOGON
MSV1_0
Elaborazione della seconda metà di un accesso al protocollo NTLM 2.0. La prima metà di questo tipo di accesso viene eseguita chiamando LsaCallAuthenticationPackage con il messaggio di MsV1_0Lm20ChallengeRequest . Per altre informazioni, vedere la descrizione di MsV1_0Lm20ChallengeRequest in MSV1_0_PROTOCOL_MESSAGE_TYPE.

Questo tipo di accesso può usare un pacchetto di sottoutenticazione.

MSV1_0_SUBAUTH_LOGON
MSV1_0
Autenticazione di un utente con sottoutenticazione.
 

Per altre informazioni sul buffer usato da altri pacchetti di autenticazione, vedere la documentazione per tali pacchetti di autenticazione.

[in] AuthenticationInformationLength

Lunghezza, in byte, del buffer AuthenticationInformation .

[in, optional] LocalGroups

Elenco di identificatori di gruppo aggiuntivi da aggiungere al token dell'utente autenticato. Questi identificatori di gruppo verranno aggiunti, insieme al gruppo predefinito WORLD e al gruppo di tipi di accesso (Interactive, Batch o Network), che vengono automaticamente inclusi in ogni token utente.

[in] SourceContext

Struttura TOKEN_SOURCE che identifica il modulo di origine, ad esempio gestione sessione, e il contesto che può essere utile per tale modulo. Queste informazioni sono incluse nel token utente e possono essere recuperate chiamando GetTokenInformation.

[out] ProfileBuffer

Puntatore a un puntatore void che riceve l'indirizzo di un buffer di output che contiene informazioni di autenticazione, ad esempio la shell di accesso e la home directory.

Questo parametro può essere una delle strutture del buffer di output seguenti per i pacchetti di autenticazione MSV1_0 e Kerberos.

Valore Significato
MSV1_0_INTERACTIVE_PROFILE
MSV1_0
Profilo di accesso interattivo dell'utente.
KERB_TICKET_PROFILE
Kerberos
Output di autenticazione di accesso, disconnessione e aggiornamento ticket.
MSV1_0_LM20_LOGON
MSV1_0
Output durante l'elaborazione della seconda metà di un accesso al protocollo NTLM 2.0.
MSV1_0_LM20_LOGON_PROFILE
MSV1_0
Output quando si usa l'autenticazione con sottoutenticazione.
 

Per altre informazioni sul buffer usato da altri pacchetti di autenticazione, vedere la documentazione per tale pacchetto di autenticazione.

Quando questo buffer non è più necessario, l'applicazione chiamante deve liberare questo buffer chiamando la funzione LsaFreeReturnBuffer .

[out] ProfileBufferLength

Puntatore a un ULONG che riceve la lunghezza, in byte, del buffer del profilo restituito.

[out] LogonId

Puntatore a un buffer che riceve un LUID che identifica in modo univoco la sessione di accesso. Questo LUID viene assegnato dal controller di dominio che ha autenticato le informazioni di accesso.

[out] Token

Puntatore a un handle che riceve il nuovo token utente creato per questa sessione. Al termine dell'uso del token, rilasciarlo chiamando la funzione CloseHandle .

[out] Quotas

Quando viene restituito un token primario, questo parametro riceve una struttura QUOTA_LIMITS che contiene i limiti di quota di processo assegnati al processo iniziale dell'utente appena connesso.

[out] SubStatus

Se l'accesso non è riuscito a causa delle restrizioni dell'account, questo parametro riceve informazioni sul motivo per cui l'accesso non è riuscito. Questo valore viene impostato solo se le informazioni sull'account dell'utente sono valide e l'accesso viene rifiutato.

Questo parametro può essere uno dei valori SubStatus seguenti per il pacchetto di autenticazione MSV1_0.

Valore Significato
STATUS_INVALID_LOGON_HOURS
L'account utente ha restrizioni di tempo e non può essere usato per accedere in questo momento.
STATUS_INVALID_WORKSTATION
L'account utente ha restrizioni sulla workstation e non può essere usato per accedere dalla workstation corrente.
STATUS_PASSWORD_EXPIRED
La password dell'account utente è scaduta.
STATUS_ACCOUNT_DISABLED
L'account utente è attualmente disabilitato e non può essere usato per accedere.

Valore restituito

Se la funzione ha esito positivo, la funzione restituisce STATUS_SUCCESS.

Se la funzione ha esito negativo, restituisce un codice NTSTATUS , che può essere uno dei valori seguenti.

Valore Descrizione
STATUS_QUOTA_EXCEEDED
La quota di memoria del chiamante non è sufficiente per allocare il buffer di output restituito dal pacchetto di autenticazione.
STATUS_ACCOUNT_RESTRICTION
L'account utente e la password sono legittimi, ma l'account utente ha una restrizione che impedisce l'accesso in questo momento. Per altre informazioni, vedere il valore archiviato nel parametro SubStatus .
STATUS_BAD_VALIDATION_CLASS
Le informazioni di autenticazione fornite non vengono riconosciute dal pacchetto di autenticazione.
STATUS_LOGON_FAILURE
Il tentativo di accesso ha avuto esito negativo. Il motivo dell'errore non è specificato, ma i motivi tipici includono nomi utente non ortografiati e password non eliminate.
STATUS_NO_LOGON_SERVERS
Nessun controller di dominio è disponibile per il servizio della richiesta di autenticazione.
STATUS_NO_SUCH_PACKAGE
Il pacchetto di autenticazione specificato non viene riconosciuto dall'LSA.
STATUS_PKINIT_FAILURE
Il client Kerberos ha ricevuto un certificato KDC non valido. Per l'accesso al dispositivo, è necessaria la convalida KDC rigorosa, pertanto il KDC deve disporre di certificati che usano il modello "Autenticazione Kerberos" o equivalente. Inoltre, il certificato KDC potrebbe essere scaduto, revocato o il client è in attacco attivo dell'invio di richieste al server errato.
STATUS_PKINIT_CLIENT_FAILURE
Il client Kerberos usa un certificato di sistema non valido. Per l'accesso del dispositivo, deve essere presente un nome DNS. Inoltre, il certificato di sistema potrebbe essere scaduto o quello errato potrebbe essere selezionato.
 

Per altre informazioni, vedere Valori restituiti dalla funzione criteri LSA.

La funzione LsaNtStatusToWinError converte un codice NTSTATUS in un codice di errore di Windows.

Commenti

Il parametro OriginName deve specificare informazioni significative. Ad esempio, potrebbe contenere "TTY1" per indicare il terminale uno o "NTLM - remote node JAZZ" per indicare un accesso di rete che usa NTLM tramite un nodo remoto denominato "JAZZ".

È necessario chiamare separatamente LsaLogonUser per aggiornare le credenziali del dispositivo PKINIT per LOCAL_SYSTEM e NETWORK_SERVICE. Quando non è presente alcuna credenziale del dispositivo PKINIT, una chiamata riuscita non esegue alcuna operazione. Quando è presente una credenziale del dispositivo PKINIT, una chiamata riuscita pulisce le credenziali del dispositivo PKINIT in modo che solo le credenziali delle password rimangano.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione ntsecapi.h
Libreria Secur32.lib
DLL Secur32.dll

Vedi anche

Consenti l'accesso anonimo

LsaCallAuthenticationPackage

LsaFreeReturnBuffer

LsaLookupAuthenticationPackage