Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El autorizador User-Defined Functions (UDF) le permite ejecutar lógica de autorización personalizada antes de procesar una solicitud de GraphQL API. Esta funcionalidad permite a los propietarios de API aplicar reglas de acceso específicas de la empresa que van más allá de las asignaciones de roles estáticas. Con una UDF del autorizador, puede evaluar la información de la solicitud autenticada (como las notificaciones en un token web JSON (JWT) y decidir si se debe permitir la solicitud. La lógica se implementa como una función y se invoca automáticamente para las llamadas de la API entrantes.
Casos de uso
Use una función de datos de usuario autorizador cuando necesite:
- Aplicación de lógica de negocios personalizada antes de la ejecución de la API
- Restricción del acceso basado en reclamaciones de token o identidad de usuario
- Validar por separado la entidad de servicio de las cuentas de usuario
Funcionamiento de la característica de autorización
Cuando la autorización personalizada está habilitada con una función de datos de usuario:
- Una función se ejecuta antes de que se ejecute GraphQL API.
- Recibe el contexto de la solicitud autenticada.
- La lógica personalizada comprueba la autorización.
- La solicitud de API continúa si la autorización se realiza correctamente; de lo contrario, se deniega.
- El resultado se logra más rápido para las solicitudes futuras.
Creación de una función de datos de usuario
Una función autorizador dentro de una función de datos de usuario Fabric requiere un formato específico.
- El nombre de la función puede definirse por el usuario. No tiene ninguna restricción específica de GraphQL y debe definirse en función de las restricciones de función de datos de usuario.
- El nombre de argumento o parámetro de la función debe ser request y debe ser de tipo dictionary. Cuando el servicio GraphQL invoca una función, envía una carga que contiene un diccionario denominado solicitud con los campos siguientes:
- tokenClaims (diccionario): pares clave-valor que contienen afirmaciones extraídas del token de usuario entrante.
- query(string): la cadena de consulta pasada cuando se llama a GraphQL API.
- variables(dictionary): pares clave-valor que contienen variables que se pasan cuando se llama a GraphQL API.
-
Tipo de valor devuelto(diccionario): La función devuelve
isAuthorizedyroles.roleses opcional y debe enviarse cuando la característica RBAC está habilitada.
Example
Cree una función de datos de usuario en Fabric portal. Actualice el código de función con esta función de autorizador de ejemplo.
from typing import TYPE_CHECKING
import fabric.functions as fn
import logging
user data function = fn.UserDataFunctions()
@user data function.function()
def invokeauthudf(request: dict) -> dict:
token_claims: dict = request.get("tokenClaims", {})
query: str = request.get("query", "")
variables: dict = request.get("variables", {})
domain = "onmicrosoft.com"
spn = "<SPN-ID>"
# Extract claims from token_claims dictionary
tid_claim = token_claims.get("tid")
upn_claim = token_claims.get("upn")
appid_claim = token_claims.get("appid")
logging.info(f"Query: {query}");
logging.info(f"Claims: {token_claims}");
logging.info(f"Tenant: {tid_claim}");
logging.info(f"UPN: {upn_claim}");
logging.info(f"SPN: {appid_claim}");
# Authorization logic
## Optional: Do role-based access check
roles = []
if upn_claim is not None:
is_authorized = domain in upn_claim
roles = ["Default"]
else:
is_authorized = spn in appid_claim
roles = ["SPN"]
logging.info(f"Authorized: {is_authorized}")
logging.info(f"Roles: {roles}")
logging.info(f"SPN: {spn}")
logging.info(f"App ID: {appid_claim}")
return {
"isAuthorized": is_authorized,
"roles": roles
}
¿Qué hace esta función?
- Esta función de datos de usuario del autorizador se ejecuta antes de que se ejecute una solicitud GraphQL, lee los reclamos de identidad (UPN, ID de aplicación) del token JSON Web Token (JWT) del llamante y registra los detalles de la solicitud.
- Autoriza a los usuarios comprobando si su correo electrónico (UPN) pertenece a un dominio específico y autoriza a las entidades de servicio mediante la coincidencia de un identificador de aplicación conocido.
- En función del resultado, devuelve isAuthorized.
Adición de una conexión a la función Datos de usuario
Antes de habilitar la característica, debe agregar una conexión para un tipo de función de datos de usuario.
- En configuración , seleccione Administrar conexiones y puertas de enlace.
- En la pestaña Conexiones , seleccione Nuevo.
- En la página Nueva conexión , seleccione Nube, proporcione un nombre para la conexión y seleccione Función de datos de usuario como tipo de conexión. Use el método OAUth y actualice las credenciales para autenticarse. No es necesario comprobar "Permitir que esta conexión se use con puertas de enlace de datos locales o puertas de enlace de datos de red virtual" al crear esta conexión.
Habilitación de la característica de autorización
Habilite la característica de autorización una vez configurada la función y la conexión para este tipo de función de datos de usuario. Necesita permisos de escritura para habilitar o deshabilitar esta característica.
- Abra el elemento API para GraphQL y seleccione Configuración.
- Seleccione Autorización (versión preliminar) y habilite la característica.
- Proporcione el elemento de función de datos de usuario y la función de autenticación que desea usar.
Limitaciones y comportamientos
| Categoría | Detalles |
|---|---|
| Autenticación | Solo se admite OAuth |
| Soporte para B2B | No disponible para los usuarios invitados debido a limitaciones de conexión |
| Permisos | Escritura necesaria para la configuración; Ejecución necesaria para llamadas API |
| Configuraciones no admitidas | No se admite SPN con identificador de objeto (OID) |
| Almacenamiento en memoria caché | Los cambios pueden tardar hasta 15 minutos en aplicarse |
| Dependencia de región | UDF y GraphQL deben estar en la misma región |
| Private Link | No se admite con el acceso público bloqueado |
| Errores de autorización | Las solicitudes producen un error cuando isAuthorized es false o cuando RBAC está habilitado y faltan los roles devueltos o no coinciden con un rol configurado. |
| Gestión de roles | Cuando RBAC está habilitado, la función debe devolver roles. Solo se aplica el primer rol coincidente. |