Compartilhar via


Função LsaLogonUser (ntsecapi.h)

A função LsaLogonUser autentica os dados de logon de uma entidade de segurança usando informações de credenciais armazenadas.

Se a autenticação for bem-sucedida, essa função criará uma nova sessão de logon e retornará um token de usuário.

Quando um novo TGT (tíquete de concessão de tíquete) é obtido usando novas credenciais de certificado, todos os TGTs e tíquetes de serviço do sistema são limpos. Todos os tíquetes de serviço de usuário que são de uma identidade composta também são limpos.

Sintaxe

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

Parâmetros

[in] LsaHandle

Um identificador obtido de uma chamada anterior para LsaRegisterLogonProcess.

O chamador deverá ter SeTcbPrivilege somente se um ou mais dos seguintes itens forem verdadeiros:

  • Um pacote de Subautenticação é usado.
  • KERB_S4U_LOGON é usado e o chamador solicita um token de representação.
  • O parâmetro LocalGroups não é NULL.
Se SeTcbPrivilege não for necessário, chame LsaConnectUntrusted para obter o identificador.

[in] OriginName

Uma cadeia de caracteres que identifica a origem da tentativa de logon. Para obter mais informações, consulte Comentários.

[in] LogonType

Um valor da enumeração SECURITY_LOGON_TYPE que especifica o tipo de logon solicitado. Se LogonType for Interativo ou Lote, um token primário será gerado para representar o novo usuário. Se LogonType for Rede, um token de representação será gerado.

[in] AuthenticationPackage

Um identificador do pacote de autenticação a ser usado para a autenticação. Você pode obter esse valor chamando LsaLookupAuthenticationPackage.

[in] AuthenticationInformation

Um ponteiro para um buffer de entrada que contém informações de autenticação, como nome de usuário e senha. O formato e o conteúdo desse buffer são determinados pelo pacote de autenticação.

Esse parâmetro pode ser uma das estruturas de buffer de entrada a seguir para os pacotes de autenticação MSV1_0 e Kerberos.

Valor Significado
MSV1_0_INTERACTIVE_LOGON
MSV1_0
Autenticando um logon de usuário interativo.

Os membros LogonDomainName, UserName e Password da estrutura MSV1_0_INTERACTIVE_LOGON devem apontar para buffers na memória contíguos para a própria estrutura. O valor do parâmetro AuthenticationInformationLength deve levar em conta o comprimento desses buffers.

KERB_INTERACTIVE_LOGON
Kerberos
Autenticando um logon de usuário interativo.
KERB_TICKET_LOGON
Kerberos
Autenticar um usuário no logon de rede inicial ou desconectar.
KERB_TICKET_UNLOCK_LOGON
Kerberos
Autenticar um usuário na atualização de tíquete, uma variação do logon de desbloqueio normal da estação de trabalho.
KERB_CERTIFICATE_LOGON
Kerberos
Autenticar um usuário usando um logon de cartão inteligente interativo.
KERB_CERTIFICATE_S4U_LOGON
Kerberos
Autenticar um usuário usando um logon S4U (serviço para usuário).
KERB_CERTIFICATE_UNLOCK_LOGON
Kerberos
Autenticar um usuário para desbloquear uma estação de trabalho que foi bloqueada durante uma sessão interativa de logon de cartão inteligente.
KERB_SMARTCARD_LOGON
Kerberos
Autenticar um logon de cartão inteligente do usuário usando LOGON32_PROVIDER_WINNT50 ou LOGON32_PROVIDER_DEFAULT.
KERB_SMARTCARD_UNLOCK_LOGON
Kerberos
Autenticar um usuário para desbloquear uma estação de trabalho que foi bloqueada durante uma sessão de logon de cartão inteligente.
KERB_S4U_LOGON
Kerberos
Autenticar um usuário usando solicitações de cliente S4U. Para delegação restrita, uma chamada para LsaLogonUser não será necessária se o cliente fizer logon usando um pacote de autenticação no modo LSA. Em sistemas operacionais Windows, eles incluem Kerberos, NTLM, Secure Channel e Digest. Para que essa chamada seja bem-sucedida, o seguinte deve ser verdadeiro:
  • O chamador deve ser uma conta de domínio (isso inclui LOCAL_SYSTEM se o computador for um membro de domínio).
  • Se estiver usando uma conta de serviço, a conta deverá ter SeTcbPrivilege definido no computador local para obter um token de representação. Caso contrário, o token de identidade será usado.
  • O chamador deve ser membro do Acesso Compatível com o Windows 2000 ou ter acesso de leitura às associações de grupo do cliente. A associação ao grupo acesso de autorização do Windows garante o acesso de leitura à associação de grupo do cliente. Para obter informações sobre como configurar o grupo acesso de autorização do Windows, consulte a Base de Dados de Conhecimento da Microsoft.
Os membros ClientUpn e ClientRealm da estrutura KERB_S4U_LOGON devem apontar para buffers na memória contíguos para a própria estrutura. O valor do parâmetro AuthenticationInformationLength deve levar em conta o comprimento desses buffers.
MSV1_0_LM20_LOGON
MSV1_0
Processando a segunda metade de um logon de protocolo NTLM 2.0. A primeira metade desse tipo de logon é executada chamando LsaCallAuthenticationPackage com a mensagem MsV1_0Lm20ChallengeRequest . Para obter mais informações, consulte a descrição do MsV1_0Lm20ChallengeRequest no MSV1_0_PROTOCOL_MESSAGE_TYPE.

Esse tipo de logon pode usar um pacote de subautenticação.

MSV1_0_SUBAUTH_LOGON
MSV1_0
Autenticando um usuário com subautenticação.
 

Para obter mais informações sobre o buffer usado por outros pacotes de autenticação, consulte a documentação desses pacotes de autenticação.

[in] AuthenticationInformationLength

O comprimento, em bytes, do buffer AuthenticationInformation .

[in, optional] LocalGroups

Uma lista de identificadores de grupo adicionais a serem adicionados ao token do usuário autenticado. Esses identificadores de grupo serão adicionados, juntamente com o grupo padrão WORLD e o grupo de tipos de logon (Interativo, Lote ou Rede), que são incluídos automaticamente em cada token de usuário.

[in] SourceContext

Uma estrutura TOKEN_SOURCE que identifica o módulo de origem, por exemplo, o gerenciador de sessão, e o contexto que pode ser útil para esse módulo. Essas informações são incluídas no token de usuário e podem ser recuperadas chamando GetTokenInformation.

[out] ProfileBuffer

Um ponteiro para um ponteiro nulo que recebe o endereço de um buffer de saída que contém informações de autenticação, como o shell de logon e o diretório inicial.

Esse parâmetro pode ser uma das seguintes estruturas de buffer de saída para os pacotes de autenticação MSV1_0 e Kerberos.

Valor Significado
MSV1_0_INTERACTIVE_PROFILE
MSV1_0
Perfil de logon de um usuário interativo.
KERB_TICKET_PROFILE
Kerberos
Saída de autenticação de logon, desconexão e atualização de tíquete.
MSV1_0_LM20_LOGON
MSV1_0
Saída ao processar a segunda metade de um logon de protocolo NTLM 2.0.
MSV1_0_LM20_LOGON_PROFILE
MSV1_0
Saída ao usar a autenticação com subautenticação.
 

Para obter mais informações sobre o buffer usado por outros pacotes de autenticação, consulte a documentação desse pacote de autenticação.

Quando esse buffer não for mais necessário, o aplicativo de chamada deverá liberar esse buffer chamando a função LsaFreeReturnBuffer .

[out] ProfileBufferLength

Um ponteiro para um ULONG que recebe o comprimento, em bytes, do buffer de perfil retornado.

[out] LogonId

Um ponteiro para um buffer que recebe um LUID que identifica exclusivamente a sessão de logon. Esse LUID é atribuído pelo controlador de domínio que autenticou as informações de logon.

[out] Token

Um ponteiro para um identificador que recebe o novo token de usuário criado para esta sessão. Quando terminar de usar o token, libere-o chamando a função CloseHandle .

[out] Quotas

Quando um token primário é retornado, esse parâmetro recebe uma estrutura QUOTA_LIMITS que contém os limites de cota de processo atribuídos ao processo inicial do usuário conectado recentemente.

[out] SubStatus

Se o logon falhou devido a restrições de conta, esse parâmetro receberá informações sobre por que o logon falhou. Esse valor será definido somente se as informações da conta do usuário forem válidas e o logon for rejeitado.

Esse parâmetro pode ser um dos seguintes valores de SubStatus para o pacote de autenticação MSV1_0.

Valor Significado
STATUS_INVALID_LOGON_HOURS
A conta de usuário tem restrições de tempo e não pode ser usada para fazer logon no momento.
STATUS_INVALID_WORKSTATION
A conta de usuário tem restrições de estação de trabalho e não pode ser usada para fazer logon da estação de trabalho atual.
STATUS_PASSWORD_EXPIRED
A senha da conta de usuário expirou.
STATUS_ACCOUNT_DISABLED
A conta de usuário está desabilitada no momento e não pode ser usada para fazer logon.

Retornar valor

Se a função for bem-sucedida, a função retornará STATUS_SUCCESS.

Se a função falhar, ela retornará um código NTSTATUS , que pode ser um dos valores a seguir.

Valor Descrição
STATUS_QUOTA_EXCEEDED
A cota de memória do chamador é insuficiente para alocar o buffer de saída retornado pelo pacote de autenticação.
STATUS_ACCOUNT_RESTRICTION
A conta de usuário e a senha são legítimas, mas a conta de usuário tem uma restrição que impede o logon no momento. Para obter mais informações, consulte o valor armazenado no parâmetro SubStatus .
STATUS_BAD_VALIDATION_CLASS
As informações de autenticação fornecidas não são reconhecidas pelo pacote de autenticação.
STATUS_LOGON_FAILURE
Falha na tentativa de logon. O motivo da falha não é especificado, mas os motivos típicos incluem nomes de usuário com ortografia incorreta e senhas incorretas.
STATUS_NO_LOGON_SERVERS
Nenhum controlador de domínio está disponível para atender à solicitação de autenticação.
STATUS_NO_SUCH_PACKAGE
O pacote de autenticação especificado não é reconhecido pela LSA.
STATUS_PKINIT_FAILURE
O cliente Kerberos recebeu um certificado KDC que não é válido. Para o logon do dispositivo, a validação estrita do KDC é necessária, portanto, o KDC deve ter certificados que usem o modelo "Autenticação Kerberos" ou equivalente. Além disso, o certificado KDC pode ter expirado, revogado ou o cliente está sob ataque ativo de enviar solicitações para o servidor errado.
STATUS_PKINIT_CLIENT_FAILURE
O cliente Kerberos está usando um certificado do sistema que não é válido. Para o logon do dispositivo, deve haver um nome DNS. Além disso, o certificado do sistema pode ter expirado ou o errado pode ser selecionado.
 

Para obter mais informações, consulte Valores retornados da função de política LSA.

A função LsaNtStatusToWinError converte um código NTSTATUS em um código de erro do Windows.

Comentários

O parâmetro OriginName deve especificar informações significativas. Por exemplo, ele pode conter "TTY1" para indicar o terminal um ou "NTLM – jazz de nó remoto" para indicar um logon de rede que usa NTLM por meio de um nó remoto chamado "JAZZ".

Você deve chamar LsaLogonUser separadamente para atualizar as credenciais do dispositivo PKINIT para LOCAL_SYSTEM e NETWORK_SERVICE. Quando não há nenhuma credencial de dispositivo PKINIT, uma chamada bem-sucedida não faz nenhuma operação. Quando há uma credencial de dispositivo PKINIT, uma chamada bem-sucedida limpa a credencial do dispositivo PKINIT para que apenas a credencial de senha permaneça.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho ntsecapi.h
Biblioteca Secur32.lib
DLL Secur32.dll

Confira também

Permitindo acesso anônimo

LsaCallAuthenticationPackage

LsaFreeReturnBuffer

LsaLookupAuthenticationPackage