初始化客户端上下文

应用程序必须先创建客户端上下文,然后才能使用 Authz API 执行访问检查或审核。

应用程序必须调用 AuthzInitializeResourceManager 函数来初始化资源管理器。 然后,应用程序可以调用多个函数之一来创建客户端上下文。 此外,如果要远程执行访问检查或审核,则必须使用 AuthzInitializeRemoteResourceManager 函数。

若要基于现有客户端上下文创建客户端上下文,请调用 AuthzInitializeContextFromAuthzContext 函数。

AuthzInitializeContextFromToken 函数使用登录令牌中的信息创建新的客户端上下文。 AuthzInitializeContextFromSid 函数使用指定的 SID 创建新的客户端上下文。

如果可能,请调用 AuthzInitializeContextFromToken 函数,而不是 AuthzInitializeContextFromSidAuthzInitializeContextFromSid 尝试检索客户端实际登录后登录令牌中可用的信息。 实际的登录令牌提供更多信息,例如登录类型和登录属性,并反映用于登录的身份验证包的行为。 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;

}

将 SID 添加到客户端上下文

缓存访问检查

使用 Authz API 检查访问

AccessCheck 的工作原理

查询客户端上下文

条件 ACE 的安全描述符定义语言

AuthzInitializeRemoteResourceManager

AuthzInitializeResourceManager