클라이언트 컨텍스트 초기화
애플리케이션은 Authz API를 사용하여 액세스 확인 또는 감사를 수행하기 전에 클라이언트 컨텍스트를 만들어야 합니다.
애플리케이션은 AuthzInitializeResourceManager 함수를 호출하여 리소스 관리자를 초기화해야 합니다. 그런 다음 애플리케이션은 여러 함수 중 하나를 호출하여 클라이언트 컨텍스트를 만들 수 있습니다. 또한 액세스 검사를 수행하거나 원격으로 감사하는 경우 AuthzInitializeRemoteResourceManager 함수를 사용해야 합니다.
기존 클라이언트 컨텍스트를 기반으로 클라이언트 컨텍스트를 만들려면 AuthzInitializeContextFromAuthzContext 함수를 호출합니다.
AuthzInitializeContextFromToken 함수는 로그온 토큰의 정보를 사용하여 새 클라이언트 컨텍스트를 만듭니다. AuthzInitializeContextFromSid 함수는 지정된 SID를 사용하여 새 클라이언트 컨텍스트를 만듭니다.
가능하면 AuthzInitializeContextFromSid 대신 AuthzInitializeContextFromToken 함수를 호출합니다. AuthzInitializeContextFromSid 는 클라이언트가 실제로 로그온한 로그온 토큰에서 사용할 수 있는 정보를 검색하려고 시도합니다. 실제 로그온 토큰은 로그온 유형 및 로그온 속성과 같은 자세한 정보를 제공하며 로그온에 사용되는 인증 패키지의 동작을 반영합니다. AuthzInitializeContextFromToken에서 만든 클라이언트 컨텍스트는 로그온 토큰을 사용하며 결과 클라이언트 컨텍스트는 AuthzInitializeContextFromSid에서 만든 클라이언트 컨텍스트보다 더 완전하고 정확합니다.
참고
조건식에서 참조하는 경우 보안 특성 변수가 클라이언트 컨텍스트에 있어야 합니다. 그렇지 않으면 참조하는 조건식 용어가 알 수 없음으로 평가됩니다. 조건식에 대한 자세한 내용은 조건부 AES에 대한 보안 설명자 정의 언어 항목을 참조하세요.
예제
다음 예제에서는 Authz 리소스 관리자를 초기화하고 AuthzInitializeContextFromToken 함수를 호출하여 현재 프로세스와 연결된 로그온 토큰에서 클라이언트 컨텍스트를 만듭니다.
BOOL AuthzInitFromToken(AUTHZ_CLIENT_CONTEXT_HANDLE *phClientContext)
{
HANDLE hToken = NULL;
LUID Luid = {0, 0};
ULONG uFlags = 0;
//Initialize Resource Manager
if(!AuthzInitializeResourceManager(
AUTHZ_RM_FLAG_NO_AUDIT,
NULL,
NULL,
NULL,
L"My Resource Manager",
&g_hResourceManager
))
{
printf_s("AuthzInitializeResourceManager failed with %d\n", GetLastError);
return FALSE;
}
//Get the current token.
if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken))
{
printf_s("OpenProcessToken failed with %d\n", GetLastError);
return FALSE;
}
//Initialize the client context
if(!AuthzInitializeContextFromToken(
0,
hToken,
g_hResourceManager,
NULL,
Luid,
NULL,
phClientContext
))
{
printf_s("AuthzInitializeContextFromToken failed with %d\n", GetLastError);
return FALSE;
}
printf_s("Initialized client context. \n");
return TRUE;
}
관련 항목