다음을 통해 공유


ImpersonateSecurityContext 함수(sspi.h)

ImpersonateSecurityContext 함수를 사용하면 서버가 AcceptSecurityContext(일반) 또는 QuerySecurityContextToken 호출에서 이전에 가져온 토큰을 사용하여 클라이언트를 가장할 수 있습니다. 이 함수를 사용하면 애플리케이션 서버가 클라이언트 역할을 할 수 있으므로 필요한 모든 액세스 제어가 적용됩니다.

구문

KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(
  [in] PCtxtHandle phContext
);

매개 변수

[in] phContext

가장할 컨텍스트의 핸들입니다. AcceptSecurityContext(일반) 함수를 호출하여 이 핸들을 가져와야 합니다.

반환 값

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

함수가 실패하면 다음 오류 코드를 반환합니다.

반환 코드 설명
SEC_E_INVALID_HANDLE
함수에 전달된 핸들이 잘못되었습니다.
SEC_E_NO_IMPERSONATION
클라이언트를 가장할 수 없습니다.
SEC_E_UNSUPPORTED_FUNCTION
이 값은 이 함수가 지원되지 않음을 나타내기 위해 Schannel 커널 모드에서 반환됩니다.

설명

서버 애플리케이션은 클라이언트를 가장해야 할 때 ImpersonateSecurityContext 함수를 호출합니다. 이렇게 하기 전에 서버에서 유효한 컨텍스트 핸들을 가져와야 합니다. 컨텍스트 핸들을 가져오려면 서버가 AcceptSecurityContext(일반) 를 호출하여 클라이언트의 들어오는 보안 토큰을 보안 시스템에 제출해야 합니다. 인바운드 컨텍스트의 유효성을 검사하는 경우 서버는 컨텍스트 핸들을 가져옵니다. 함수는 가장 토큰을 만들고 스레드 또는 프로세스가 가장 컨텍스트와 함께 실행되도록 허용합니다.

Schannel SSP(보안 지원 공급자)를 사용하는 경우 서버 애플리케이션은 AcceptSecurityContext(일반)를 호출할 때 ASC_REQ_MUTUAL_AUTH 플래그를 전달해야 합니다. 이렇게 하면 클라이언트가 SSL/TLS 핸드셰이크 중에 클라이언트 인증서를 요청합니다. 클라이언트 인증서가 수신되면 Schannel 패키지는 클라이언트 인증서를 확인하고 사용자 계정에 매핑하려고 시도합니다. 이 매핑이 성공하면 클라이언트 사용자 토큰이 만들어지고 이 함수가 성공합니다.

애플리케이션 서버는 완료되거나 자체 보안 컨텍스트를 복원해야 할 때 RevertSecurityContext 함수를 호출해야 합니다.

ImpersonateSecurityContext 는 모든 플랫폼의 모든 보안 패키지 에서 사용할 수 없습니다. 일반적으로 플랫폼 및 가장을 지원하는 보안 패키지에서만 구현됩니다. 보안 패키지가 가장을 지원하는지 여부를 알아보려면 QuerySecurityPackageInfo 함수를 호출합니다.

참고ImpersonateSecurityContext 함수가 실패하면 클라이언트가 가장되지 않고 모든 후속 클라이언트 요청이 함수를 호출한 프로세스의 보안 컨텍스트에서 수행됩니다. 호출 프로세스가 권한 있는 계정으로 실행되는 경우 클라이언트가 수행할 수 없는 작업을 수행할 수 있습니다. 보안 위험을 방지하기 위해 호출 프로세스는 항상 반환 값을 검사 합니다. 반환 값이 함수 호출에 실패했음을 나타내는 경우 클라이언트 요청을 실행해서는 안 됩니다.
 
ImpersonateSecurityContext를 포함한 모든 가장 함수는 다음 중 하나가 true인 경우 요청된 가장을 허용합니다.
  • 토큰의 요청된 가장 수준이 SecurityIdentification 또는 SecurityAnonymous와 같은 SecurityImpersonation보다 작습니다.
  • 호출자에게는 SeImpersonatePrivilege 권한이 있습니다.
  • 프로세스(또는 호출자의 로그온 세션의 다른 프로세스)는 LogonUser 또는 LsaLogonUser 함수를 통해 명시적 자격 증명을 사용하여 토큰을 만들었습니다.
  • 인증된 ID는 호출자와 동일합니다.
SP1 이하의 Windows XP: SeImpersonatePrivilege 권한은 지원되지 않습니다.

Windows XP: SeImpersonatePrivilege 권한은 SP2(서비스 팩 2)가 있는 Windows XP까지 지원되지 않습니다.

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 sspi.h(Security.h 포함)
라이브러리 Secur32.lib
DLL Secur32.dll

추가 정보

AcceptSecurityContext(일반)

QuerySecurityPackageInfo

RevertSecurityContext

SSPI 함수