LsaLogonUser 함수(ntsecapi.h)

LsaLogonUser 함수는 저장된 자격 증명 정보를 사용하여 보안 주체의 로그온 데이터를 인증합니다.

인증에 성공하면 이 함수는 새 로그온 세션을 만들고 사용자 토큰을 반환합니다.

새 인증서 자격 증명을 사용하여 새 TGT(티켓 부여 티켓)를 가져오면 시스템의 모든 TGT 및 서비스 티켓이 제거됩니다. 복합 ID인 모든 사용자 서비스 티켓도 제거됩니다.

구문

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

매개 변수

[in] LsaHandle

LsaRegisterLogonProcess에 대한 이전 호출에서 가져온 핸들입니다.

다음 중 하나 이상이 true인 경우에만 호출자에게 SeTcbPrivilege 가 있어야 합니다.

  • 하위 인증 패키지가 사용됩니다.
  • KERB_S4U_LOGON 사용되며 호출자는 가장 토큰을 요청합니다.
  • LocalGroups 매개 변수가 NULL이 아닙니다.
SeTcbPrivilege가 필요하지 않은 경우 LsaConnectUntrusted를 호출하여 핸들을 가져옵니다.

[in] OriginName

로그온 시도의 원본을 식별하는 문자열입니다. 자세한 내용은 설명 부분을 참조하세요.

[in] LogonType

요청된 로그온 유형을 지정하는 SECURITY_LOGON_TYPE 열거형의 값입니다. LogonType이 Interactive 또는 Batch이면 새 사용자를 나타내는 기본 토큰이 생성됩니다. LogonType이 네트워크이면 가장 토큰이 생성됩니다.

[in] AuthenticationPackage

인증에 사용할 인증 패키지의 식별자입니다. LsaLookupAuthenticationPackage를 호출하여 이 값을 가져올 수 있습니다.

[in] AuthenticationInformation

사용자 이름 및 암호와 같은 인증 정보를 포함하는 입력 버퍼에 대한 포인터입니다. 이 버퍼의 형식과 콘텐츠는 인증 패키지에 의해 결정됩니다.

이 매개 변수는 MSV1_0 및 Kerberos 인증 패키지에 대한 다음 입력 버퍼 구조 중 하나일 수 있습니다.

의미
MSV1_0_INTERACTIVE_LOGON
MSV1_0
대화형 사용자 로그온 인증

MSV1_0_INTERACTIVE_LOGON 구조체의 LogonDomainName, UserNamePassword 멤버는 구조 자체와 인접한 메모리의 버퍼를 가리킵니다. AuthenticationInformationLength 매개 변수의 값은 이러한 버퍼의 길이를 고려해야 합니다.

KERB_INTERACTIVE_LOGON
Kerberos
대화형 사용자 로그온 인증
KERB_TICKET_LOGON
Kerberos
초기 네트워크 로그온 또는 연결 끊기에서 사용자 인증
KERB_TICKET_UNLOCK_LOGON
Kerberos
일반 워크스테이션 잠금 해제 로그온의 변형인 티켓 새로 고침에서 사용자를 인증합니다.
KERB_CERTIFICATE_LOGON
Kerberos
대화형 스마트 카드 로그온을 사용하여 사용자 인증
KERB_CERTIFICATE_S4U_LOGON
Kerberos
사용자용 서비스(S4U) 로그온을 사용하여 사용자 인증
KERB_CERTIFICATE_UNLOCK_LOGON
Kerberos
대화형 스마트 카드 로그온 세션 중에 잠긴 워크스테이션의 잠금을 해제하도록 사용자를 인증합니다.
KERB_SMARTCARD_LOGON
Kerberos
LOGON32_PROVIDER_WINNT50 또는 LOGON32_PROVIDER_DEFAULT 사용하여 사용자 스마트 카드 로그온 인증
KERB_SMARTCARD_UNLOCK_LOGON
Kerberos
스마트 카드 로그온 세션 중에 잠긴 워크스테이션의 잠금을 해제하도록 사용자를 인증합니다.
KERB_S4U_LOGON
Kerberos
S4U 클라이언트 요청을 사용하여 사용자 인증 제한된 위임의 경우 클라이언트가 LSA 모드 인증 패키지를 사용하여 로그온한 경우 LsaLogonUser에 대한 호출이 필요하지 않습니다. Windows 운영 체제에서는 Kerberos, NTLM, 보안 채널다이제스트가 포함됩니다. 이 호출이 성공하려면 다음이 true여야 합니다.
  • 호출자는 도메인 계정이어야 합니다(컴퓨터가 도메인 구성원인 경우 LOCAL_SYSTEM 포함).
  • 서비스 계정을 사용하는 경우 가장 토큰을 얻으려면 계정에 로컬 컴퓨터에 SeTcbPrivilege 가 설정되어 있어야 합니다. 그렇지 않으면 ID 토큰이 사용됩니다.
  • 호출자는 Windows 2000 이전 호환 액세스 의 구성원이거나 클라이언트의 그룹 멤버 자격에 대한 읽기 권한이 있어야 합니다. Windows 권한 부여 액세스 그룹의 멤버 자격은 클라이언트의 그룹 멤버 자격에 대한 읽기 액세스를 보장합니다. Windows 권한 부여 액세스 그룹을 구성하는 방법에 대한 자세한 내용은 Microsoft 기술 자료를 참조하세요.
KERB_S4U_LOGON 구조체의 ClientUpnClientRealm 멤버는 구조 자체와 인접한 메모리의 버퍼를 가리킵니다. AuthenticationInformationLength 매개 변수의 값은 이러한 버퍼의 길이를 고려해야 합니다.
MSV1_0_LM20_LOGON
MSV1_0
NTLM 2.0 프로토콜 로그온의 후반부 처리 이 유형의 로그온의 처음 절반은 MsV1_0Lm20ChallengeRequest 메시지와 함께 LsaCallAuthenticationPackage를 호출하여 수행됩니다. 자세한 내용은 MSV1_0_PROTOCOL_MESSAGE_TYPE MsV1_0Lm20ChallengeRequest 대한 설명을 참조 하세요.

이 유형의 로그온은 하위 인증 패키지를 사용할 수 있습니다.

MSV1_0_SUBAUTH_LOGON
MSV1_0
하위 인증을 사용하여 사용자 인증
 

다른 인증 패키지에서 사용하는 버퍼에 대한 자세한 내용은 해당 인증 패키지에 대한 설명서를 참조하세요.

[in] AuthenticationInformationLength

AuthenticationInformation 버퍼의 길이(바이트)입니다.

[in, optional] LocalGroups

인증된 사용자의 토큰에 추가할 추가 그룹 식별자 목록입니다. 이러한 그룹 식별자는 모든 사용자 토큰에 자동으로 포함되는 기본 그룹 WORLD 및 로그온 유형 그룹(대화형, 일괄 처리 또는 네트워크)과 함께 추가됩니다.

[in] SourceContext

원본 모듈(예: 세션 관리자)과 해당 모듈에 유용할 수 있는 컨텍스트를 식별하는 TOKEN_SOURCE 구조입니다. 이 정보는 사용자 토큰에 포함되며 GetTokenInformation을 호출하여 검색할 수 있습니다.

[out] ProfileBuffer

로그온 셸 및 홈 디렉터리와 같은 인증 정보를 포함하는 출력 버퍼의 주소를 수신하는 void 포인터에 대한 포인터입니다.

이 매개 변수는 MSV1_0 및 Kerberos 인증 패키지에 대한 다음 출력 버퍼 구조 중 하나일 수 있습니다.

의미
MSV1_0_INTERACTIVE_PROFILE
MSV1_0
대화형 사용자의 로그온 프로필입니다.
KERB_TICKET_PROFILE
Kerberos
로그온, 연결 끊기 및 티켓 새로 고침 인증 출력.
MSV1_0_LM20_LOGON
MSV1_0
NTLM 2.0 프로토콜 로그온의 후반부를 처리할 때 출력됩니다.
MSV1_0_LM20_LOGON_PROFILE
MSV1_0
인증을 하위 인증과 함께 사용할 때 출력합니다.
 

다른 인증 패키지에서 사용하는 버퍼에 대한 자세한 내용은 해당 인증 패키지에 대한 설명서를 참조하세요.

이 버퍼가 더 이상 필요하지 않은 경우 호출 애플리케이션은 LsaFreeReturnBuffer 함수를 호출하여 이 버퍼를 해제해야 합니다.

[out] ProfileBufferLength

반환된 프로필 버퍼의 길이(바이트)를 수신하는 ULONG 에 대한 포인터입니다.

[out] LogonId

로그온 세션을 고유하게 식별하는 LUID 를 수신하는 버퍼에 대한 포인터입니다. 이 LUID 는 로그온 정보를 인증한 도메인 컨트롤러에 의해 할당됩니다.

[out] Token

이 세션에 대해 만든 새 사용자 토큰을 수신하는 핸들에 대한 포인터입니다. 토큰 사용을 마쳤으면 CloseHandle 함수를 호출하여 해제합니다.

[out] Quotas

기본 토큰이 반환되면 이 매개 변수는 새로 로그온한 사용자의 초기 프로세스에 할당된 프로세스 할당량 제한을 포함하는 QUOTA_LIMITS 구조를 받습니다.

[out] SubStatus

계정 제한으로 인해 로그온이 실패한 경우 이 매개 변수는 로그온이 실패한 이유에 대한 정보를 수신합니다. 이 값은 사용자의 계정 정보가 유효하고 로그온이 거부된 경우에만 설정됩니다.

이 매개 변수는 MSV1_0 인증 패키지에 대해 다음 SubStatus 값 중 하나일 수 있습니다.

의미
STATUS_INVALID_LOGON_HOURS
사용자 계정에 시간 제한이 있으며 현재 로그온하는 데 사용할 수 없습니다.
STATUS_INVALID_WORKSTATION
사용자 계정에는 워크스테이션 제한이 있으며 현재 워크스테이션에서 로그온하는 데 사용할 수 없습니다.
STATUS_PASSWORD_EXPIRED
사용자 계정 암호가 만료되었습니다.
STATUS_ACCOUNT_DISABLED
사용자 계정은 현재 사용하지 않도록 설정되어 있으며 로그온하는 데 사용할 수 없습니다.

반환 값

함수가 성공하면 함수는 STATUS_SUCCESS 반환합니다.

함수가 실패하면 다음 값 중 하나일 수 있는 NTSTATUS 코드를 반환합니다.

Description
STATUS_QUOTA_EXCEEDED
호출자의 메모리 할당량이 인증 패키지에서 반환된 출력 버퍼를 할당하기에 충분하지 않습니다.
STATUS_ACCOUNT_RESTRICTION
사용자 계정 및 암호는 합법적이지만 사용자 계정에는 현재 로그온을 방지하는 제한 사항이 있습니다. 자세한 내용은 SubStatus 매개 변수에 저장된 값을 참조하세요.
STATUS_BAD_VALIDATION_CLASS
제공된 인증 정보는 인증 패키지에서 인식되지 않습니다.
STATUS_LOGON_FAILURE
로그온 시도가 실패했습니다. 오류 원인은 지정되지 않았지만, 일반적인 원인으로는 철자가 틀린 사용자 이름 및 철자가 틀린 암호가 포함됩니다.
STATUS_NO_LOGON_SERVERS
인증 요청을 서비스하는 데 사용할 수 있는 도메인 컨트롤러는 없습니다.
STATUS_NO_SUCH_PACKAGE
지정된 인증 패키지는 LSA에서 인식되지 않습니다.
STATUS_PKINIT_FAILURE
Kerberos 클라이언트가 유효하지 않은 KDC 인증서를 받았습니다. 디바이스 로그온의 경우 엄격한 KDC 유효성 검사가 필요하므로 KDC에는 "Kerberos 인증" 템플릿 또는 해당 템플릿을 사용하는 인증서가 있어야 합니다. 또한 KDC 인증서가 만료되거나 해지되거나 클라이언트가 잘못된 서버로 요청을 보내는 활성 공격을 받을 수 있습니다.
STATUS_PKINIT_CLIENT_FAILURE
Kerberos 클라이언트가 유효하지 않은 시스템 인증서를 사용하고 있습니다. 디바이스 로그온의 경우 DNS 이름이 있어야 합니다. 또한 시스템 인증서가 만료되거나 잘못된 인증서를 선택할 수 있습니다.
 

자세한 내용은 LSA 정책 함수 반환 값을 참조하세요.

LsaNtStatusToWinError 함수는 NTSTATUS 코드를 Windows 오류 코드로 변환합니다.

설명

OriginName 매개 변수는 의미 있는 정보를 지정해야 합니다. 예를 들어 "JAZZ"라는 원격 노드를 통해 NTLM을 사용하는 네트워크 로그온을 나타내기 위해 터미널 1 또는 "NTLM - 원격 노드 JAZZ"를 나타내는 "TTY1"이 포함될 수 있습니다.

LsaLogonUser를 별도로 호출하여 LOCAL_SYSTEM 및 NETWORK_SERVICE 대한 PKINIT 디바이스 자격 증명을 업데이트해야 합니다. PKINIT 디바이스 자격 증명이 없으면 호출이 성공하면 작업이 수행되지 않습니다. PKINIT 디바이스 자격 증명이 있는 경우 성공적인 호출은 암호 자격 증명만 유지되도록 PKINIT 디바이스 자격 증명을 정리합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 ntsecapi.h
라이브러리 Secur32.lib
DLL Secur32.dll

추가 정보

익명 액세스 허용

LsaCallAuthenticationPackage

LsaFreeReturnBuffer

LsaLookupAuthenticationPackage