Поделиться через


Инициализация контекста клиента

Приложение должно создать контекст клиента, прежде чем использовать API Authz для выполнения проверок доступа или аудита.

Для инициализации диспетчера ресурсов приложение должно вызвать функцию AuthzInitializeResourceManager . Затем приложение может вызвать одну из нескольких функций для создания контекста клиента. Кроме того, при удаленном выполнении проверок доступа или аудита необходимо использовать функцию AuthzInitializeRemoteResourceManager .

Чтобы создать контекст клиента на основе существующего контекста клиента, вызовите функцию AuthzInitializeContextFromAuthzContext .

Функция AuthzInitializeContextFromToken создает новый контекст клиента, используя сведения в маркере входа. Функция AuthzInitializeContextFromSid создает новый контекст клиента с помощью указанного идентификатора безопасности.

По возможности вызовите функцию AuthzInitializeContextFromToken вместо AuthzInitializeContextFromSid. AuthzInitializeContextFromSid пытается получить сведения, доступные в маркере входа, если клиент фактически вошел в систему. Фактический маркер входа предоставляет дополнительные сведения, такие как тип входа и свойства входа, а также отражает поведение пакета проверки подлинности, используемого для входа. Контекст клиента, созданный AuthzInitializeContextFromToken , использует маркер входа, а полученный контекст клиента является более полным и точным, чем контекст клиента, созданный AuthzInitializeContextFromSid.

Примечание

Переменные атрибута безопасности должны присутствовать в контексте клиента, если они ссылаются в условном выражении; В противном случае термин условного выражения, ссылающийся на них, будет оцениваться как неизвестный. Дополнительные сведения об условных выражениях см. в разделе Язык определения дескриптора безопасности для условных ACE .

 

Пример

В следующем примере инициализируется диспетчер ресурсов 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;

}

Добавление идентификаторов безопасности в контекст клиента

Кэширование проверок доступа

Проверка доступа с помощью API Authz

Как работает AccessCheck

Запрос контекста клиента

Язык определения дескриптора безопасности для условных ACE

AuthzInitializeRemoteResourceManager

AuthzInitializeResourceManager