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이 아닙니다.
[in] OriginName
로그온 시도의 원본을 식별하는 문자열입니다. 자세한 내용은 설명 부분을 참조하세요.
[in] LogonType
요청된 로그온 유형을 지정하는 SECURITY_LOGON_TYPE 열거형의 값입니다. LogonType이 Interactive 또는 Batch이면 새 사용자를 나타내는 기본 토큰이 생성됩니다. LogonType이 네트워크이면 가장 토큰이 생성됩니다.
[in] AuthenticationPackage
인증에 사용할 인증 패키지의 식별자입니다. LsaLookupAuthenticationPackage를 호출하여 이 값을 가져올 수 있습니다.
[in] AuthenticationInformation
사용자 이름 및 암호와 같은 인증 정보를 포함하는 입력 버퍼에 대한 포인터입니다. 이 버퍼의 형식과 콘텐츠는 인증 패키지에 의해 결정됩니다.
이 매개 변수는 MSV1_0 및 Kerberos 인증 패키지에 대한 다음 입력 버퍼 구조 중 하나일 수 있습니다.
값 | 의미 |
---|---|
|
대화형 사용자 로그온 인증
MSV1_0_INTERACTIVE_LOGON 구조체의 LogonDomainName, UserName 및 Password 멤버는 구조 자체와 인접한 메모리의 버퍼를 가리킵니다. AuthenticationInformationLength 매개 변수의 값은 이러한 버퍼의 길이를 고려해야 합니다. |
|
대화형 사용자 로그온 인증 |
|
초기 네트워크 로그온 또는 연결 끊기에서 사용자 인증 |
|
일반 워크스테이션 잠금 해제 로그온의 변형인 티켓 새로 고침에서 사용자를 인증합니다. |
|
대화형 스마트 카드 로그온을 사용하여 사용자 인증 |
|
사용자용 서비스(S4U) 로그온을 사용하여 사용자 인증 |
|
대화형 스마트 카드 로그온 세션 중에 잠긴 워크스테이션의 잠금을 해제하도록 사용자를 인증합니다. |
|
LOGON32_PROVIDER_WINNT50 또는 LOGON32_PROVIDER_DEFAULT 사용하여 사용자 스마트 카드 로그온 인증 |
|
스마트 카드 로그온 세션 중에 잠긴 워크스테이션의 잠금을 해제하도록 사용자를 인증합니다. |
|
S4U 클라이언트 요청을 사용하여 사용자 인증
제한된 위임의 경우 클라이언트가 LSA 모드 인증 패키지를 사용하여 로그온한 경우 LsaLogonUser에 대한 호출이 필요하지 않습니다. Windows 운영 체제에서는 Kerberos, NTLM, 보안 채널 및 다이제스트가 포함됩니다. 이 호출이 성공하려면 다음이 true여야 합니다.
|
|
NTLM 2.0 프로토콜 로그온의 후반부 처리 이 유형의 로그온의 처음 절반은 MsV1_0Lm20ChallengeRequest 메시지와 함께 LsaCallAuthenticationPackage를 호출하여 수행됩니다. 자세한 내용은 MSV1_0_PROTOCOL_MESSAGE_TYPE MsV1_0Lm20ChallengeRequest 대한 설명을 참조 하세요.
이 유형의 로그온은 하위 인증 패키지를 사용할 수 있습니다. |
|
하위 인증을 사용하여 사용자 인증 |
다른 인증 패키지에서 사용하는 버퍼에 대한 자세한 내용은 해당 인증 패키지에 대한 설명서를 참조하세요.
[in] AuthenticationInformationLength
AuthenticationInformation 버퍼의 길이(바이트)입니다.
[in, optional] LocalGroups
인증된 사용자의 토큰에 추가할 추가 그룹 식별자 목록입니다. 이러한 그룹 식별자는 모든 사용자 토큰에 자동으로 포함되는 기본 그룹 WORLD 및 로그온 유형 그룹(대화형, 일괄 처리 또는 네트워크)과 함께 추가됩니다.
[in] SourceContext
원본 모듈(예: 세션 관리자)과 해당 모듈에 유용할 수 있는 컨텍스트를 식별하는 TOKEN_SOURCE 구조입니다. 이 정보는 사용자 토큰에 포함되며 GetTokenInformation을 호출하여 검색할 수 있습니다.
[out] ProfileBuffer
로그온 셸 및 홈 디렉터리와 같은 인증 정보를 포함하는 출력 버퍼의 주소를 수신하는 void 포인터에 대한 포인터입니다.
이 매개 변수는 MSV1_0 및 Kerberos 인증 패키지에 대한 다음 출력 버퍼 구조 중 하나일 수 있습니다.
다른 인증 패키지에서 사용하는 버퍼에 대한 자세한 내용은 해당 인증 패키지에 대한 설명서를 참조하세요.
이 버퍼가 더 이상 필요하지 않은 경우 호출 애플리케이션은 LsaFreeReturnBuffer 함수를 호출하여 이 버퍼를 해제해야 합니다.
[out] ProfileBufferLength
반환된 프로필 버퍼의 길이(바이트)를 수신하는 ULONG 에 대한 포인터입니다.
[out] LogonId
로그온 세션을 고유하게 식별하는 LUID 를 수신하는 버퍼에 대한 포인터입니다. 이 LUID 는 로그온 정보를 인증한 도메인 컨트롤러에 의해 할당됩니다.
[out] Token
이 세션에 대해 만든 새 사용자 토큰을 수신하는 핸들에 대한 포인터입니다. 토큰 사용을 마쳤으면 CloseHandle 함수를 호출하여 해제합니다.
[out] Quotas
기본 토큰이 반환되면 이 매개 변수는 새로 로그온한 사용자의 초기 프로세스에 할당된 프로세스 할당량 제한을 포함하는 QUOTA_LIMITS 구조를 받습니다.
[out] SubStatus
계정 제한으로 인해 로그온이 실패한 경우 이 매개 변수는 로그온이 실패한 이유에 대한 정보를 수신합니다. 이 값은 사용자의 계정 정보가 유효하고 로그온이 거부된 경우에만 설정됩니다.
이 매개 변수는 MSV1_0 인증 패키지에 대해 다음 SubStatus 값 중 하나일 수 있습니다.
반환 값
함수가 성공하면 함수는 STATUS_SUCCESS 반환합니다.
함수가 실패하면 다음 값 중 하나일 수 있는 NTSTATUS 코드를 반환합니다.
값 | Description |
---|---|
|
호출자의 메모리 할당량이 인증 패키지에서 반환된 출력 버퍼를 할당하기에 충분하지 않습니다. |
|
사용자 계정 및 암호는 합법적이지만 사용자 계정에는 현재 로그온을 방지하는 제한 사항이 있습니다. 자세한 내용은 SubStatus 매개 변수에 저장된 값을 참조하세요. |
|
제공된 인증 정보는 인증 패키지에서 인식되지 않습니다. |
|
로그온 시도가 실패했습니다. 오류 원인은 지정되지 않았지만, 일반적인 원인으로는 철자가 틀린 사용자 이름 및 철자가 틀린 암호가 포함됩니다. |
|
인증 요청을 서비스하는 데 사용할 수 있는 도메인 컨트롤러는 없습니다. |
|
지정된 인증 패키지는 LSA에서 인식되지 않습니다. |
|
Kerberos 클라이언트가 유효하지 않은 KDC 인증서를 받았습니다. 디바이스 로그온의 경우 엄격한 KDC 유효성 검사가 필요하므로 KDC에는 "Kerberos 인증" 템플릿 또는 해당 템플릿을 사용하는 인증서가 있어야 합니다. 또한 KDC 인증서가 만료되거나 해지되거나 클라이언트가 잘못된 서버로 요청을 보내는 활성 공격을 받을 수 있습니다. |
|
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 |