Inicialización de un contexto de cliente
Una aplicación debe crear un contexto de cliente para poder usar authz API para realizar comprobaciones de acceso o auditoría.
Una aplicación debe llamar a la función AuthzInitializeResourceManager para inicializar el administrador de recursos. A continuación, la aplicación puede llamar a una de varias funciones para crear un contexto de cliente. Además, si realiza comprobaciones de acceso o auditoría de forma remota, debe usar la función AuthzInitializeRemoteResourceManager .
Para crear un contexto de cliente basado en un contexto de cliente existente, llame a la función AuthzInitializeContextFromAuthzContext .
La función AuthzInitializeContextFromToken crea un nuevo contexto de cliente mediante el uso de información en un token de inicio de sesión. La función AuthzInitializeContextFromSid crea un nuevo contexto de cliente mediante el SID especificado.
Si es posible, llame a la función AuthzInitializeContextFromToken en lugar de AuthzInitializeContextFromSid. AuthzInitializeContextFromSid intenta recuperar la información disponible en un token de inicio de sesión que el cliente realmente ha iniciado sesión. Un token de inicio de sesión real proporciona más información, como el tipo de inicio de sesión y las propiedades de inicio de sesión, y refleja el comportamiento del paquete de autenticación usado para el inicio de sesión. El contexto de cliente creado por AuthzInitializeContextFromToken usa un token de inicio de sesión y el contexto de cliente resultante es más completo y preciso que un contexto de cliente creado por AuthzInitializeContextFromSid.
Nota
Las variables de atributo de seguridad deben estar presentes en el contexto de cliente si se hace referencia a en una expresión condicional; de lo contrario, el término de expresión condicional que hace referencia a ellos se evaluará como desconocido. Para obtener más información sobre las expresiones condicionales, vea el tema Lenguaje de definición de descriptores de seguridad para ACL condicionales .
Ejemplo
En el ejemplo siguiente se inicializa el administrador de recursos de Authz y se llama a la función AuthzInitializeContextFromToken para crear un contexto de cliente a partir del token de inicio de sesión asociado al proceso actual.
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;
}
Temas relacionados