ImpersonateSecurityContext 함수(sspi.h)
ImpersonateSecurityContext 함수를 사용하면 서버가 AcceptSecurityContext(일반) 또는 QuerySecurityContextToken 호출에서 이전에 가져온 토큰을 사용하여 클라이언트를 가장할 수 있습니다. 이 함수를 사용하면 애플리케이션 서버가 클라이언트 역할을 할 수 있으므로 필요한 모든 액세스 제어가 적용됩니다.
구문
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(
[in] PCtxtHandle phContext
);
매개 변수
[in] phContext
가장할 컨텍스트의 핸들입니다. AcceptSecurityContext(일반) 함수를 호출하여 이 핸들을 가져와야 합니다.
반환 값
함수가 성공하면 함수는 SEC_E_OK 반환합니다.
함수가 실패하면 다음 오류 코드를 반환합니다.
반환 코드 | 설명 |
---|---|
|
함수에 전달된 핸들이 잘못되었습니다. |
|
클라이언트를 가장할 수 없습니다. |
|
이 값은 이 함수가 지원되지 않음을 나타내기 위해 Schannel 커널 모드에서 반환됩니다. |
설명
서버 애플리케이션은 클라이언트를 가장해야 할 때 ImpersonateSecurityContext 함수를 호출합니다. 이렇게 하기 전에 서버에서 유효한 컨텍스트 핸들을 가져와야 합니다. 컨텍스트 핸들을 가져오려면 서버가 AcceptSecurityContext(일반) 를 호출하여 클라이언트의 들어오는 보안 토큰을 보안 시스템에 제출해야 합니다. 인바운드 컨텍스트의 유효성을 검사하는 경우 서버는 컨텍스트 핸들을 가져옵니다. 함수는 가장 토큰을 만들고 스레드 또는 프로세스가 가장 컨텍스트와 함께 실행되도록 허용합니다.
Schannel SSP(보안 지원 공급자)를 사용하는 경우 서버 애플리케이션은 AcceptSecurityContext(일반)를 호출할 때 ASC_REQ_MUTUAL_AUTH 플래그를 전달해야 합니다. 이렇게 하면 클라이언트가 SSL/TLS 핸드셰이크 중에 클라이언트 인증서를 요청합니다. 클라이언트 인증서가 수신되면 Schannel 패키지는 클라이언트 인증서를 확인하고 사용자 계정에 매핑하려고 시도합니다. 이 매핑이 성공하면 클라이언트 사용자 토큰이 만들어지고 이 함수가 성공합니다.
애플리케이션 서버는 완료되거나 자체 보안 컨텍스트를 복원해야 할 때 RevertSecurityContext 함수를 호출해야 합니다.
ImpersonateSecurityContext 는 모든 플랫폼의 모든 보안 패키지 에서 사용할 수 없습니다. 일반적으로 플랫폼 및 가장을 지원하는 보안 패키지에서만 구현됩니다. 보안 패키지가 가장을 지원하는지 여부를 알아보려면 QuerySecurityPackageInfo 함수를 호출합니다.
- 토큰의 요청된 가장 수준이 SecurityIdentification 또는 SecurityAnonymous와 같은 SecurityImpersonation보다 작습니다.
- 호출자에게는 SeImpersonatePrivilege 권한이 있습니다.
- 프로세스(또는 호출자의 로그온 세션의 다른 프로세스)는 LogonUser 또는 LsaLogonUser 함수를 통해 명시적 자격 증명을 사용하여 토큰을 만들었습니다.
- 인증된 ID는 호출자와 동일합니다.
Windows XP: SeImpersonatePrivilege 권한은 SP2(서비스 팩 2)가 있는 Windows XP까지 지원되지 않습니다.
요구 사항
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | sspi.h(Security.h 포함) |
라이브러리 | Secur32.lib |
DLL | Secur32.dll |