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.
Data API Builder admite proveedores de identidades de terceros a través del proveedor de autenticación personalizada. Use este enfoque cuando su organización use Okta, Auth0 u otro proveedor de identidades compatible con OAuth 2.0/OpenID Connect.
Flujo de autenticación
Con un proveedor de identidades personalizado, la aplicación cliente controla la autenticación de usuario y, a continuación, envía el token de acceso a Data API Builder:
| Phase | ¿Qué ocurre? |
|---|---|
| Autenticación de usuario | El usuario inicia sesión a través del proveedor de identidades (Okta, Auth0, etc.) |
| Adquisición de tokens | La aplicación cliente recibe un token de acceso del IdP |
| Llamada API | El cliente envía el token a DAB en el Authorization encabezado |
| Validation | DAB valida el JWT (emisor, audiencia, firma) |
| Autorización | DAB extrae roles y evalúa los permisos. |
Prerrequisitos
- Una cuenta con su proveedor de identidades digitales (Okta, Auth0, etc.)
- Una aplicación registrada en el proveedor de identidades
- CLI de Data API Builder instalada (guía de instalación)
- Un
dab-config.jsonexistente con al menos una entidad
Referencia rápida
| Configuración | Importancia |
|---|---|
| Provider | Custom |
| Obligatorio para la validación |
iss, aud, exp, firma válida |
| Obligatorio para la autorización |
roles reclamación que contiene el rol seleccionado |
| Encabezado de token | Authorization: Bearer <token> |
| Tipo de declaración de rol |
roles (fijo, no configurable) |
| Encabezado de selección de roles | X-MS-API-ROLE |
Paso 1: Configuración del proveedor de identidades
Los pasos exactos dependen del proveedor. Estos son los valores clave que necesita:
Valores que se van a recopilar
| Importancia | Dónde encontrarla | Se utiliza para |
|---|---|---|
| Dirección URL del emisor | Documentación del proveedor o punto de conexión de metadatos de OAuth | DAB jwt.issuer (se usa como autoridad JWT) |
| Audiencia | Identificador de cliente de la aplicación o un identificador de API personalizado | DAB jwt.audience |
Nota:
DAB utiliza el elemento configurado jwt.issuer como la autoridad de JWT. Las claves de firma se detectan automáticamente a través de los metadatos estándar de OpenID Connect (normalmente <issuer>/.well-known/openid-configuration).
Ejemplo de Okta
- Inicie sesión en la consola de administración de Okta.
- Vaya a Aplicaciones>Aplicaciones.
- Cree o seleccione una aplicación.
- Anote el Identificador de Cliente (úselo como audiencia).
- El emisor suele ser
https://<your-domain>.okta.com.
Ejemplo de Auth0
- Inicie sesión en el panel de Auth0.
- Vaya a Aplicaciones>APIs.
- Cree o seleccione una API.
- Tenga en cuenta el identificador (úselo como destinatario).
- El emisor es
https://<your-tenant>.auth0.com/.
Importante
Data API Builder utiliza un tipo de reclamación fijo de roles para la autorización basada en roles. Este valor no se puede configurar. Si el proveedor de identidades emite roles en una afirmación diferente (como groups o permissions), debe configurar el proveedor para que emita también una afirmación roles, o utilizar una acción post inicio de sesión para copiar valores en una afirmación roles.
Paso 2: Configuración de Data API Builder
Establezca el proveedor de autenticación en Custom y configure las opciones de JWT.
Interfaz de línea de comandos (CLI)
# Set the authentication provider
dab configure \
--runtime.host.authentication.provider Custom
# Set the expected audience
dab configure \
--runtime.host.authentication.jwt.audience "<your-api-identifier>"
# Set the expected issuer
dab configure \
--runtime.host.authentication.jwt.issuer "https://<your-issuer>/"
Configuración resultante
{
"runtime": {
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "<your-api-identifier>",
"issuer": "https://<your-issuer>/"
}
}
}
}
}
Paso 3: Configuración de permisos de entidad
Defina permisos para los roles que asigna el proveedor de identidades:
Interfaz de línea de comandos (CLI)
# Allow authenticated users to read
dab update Book \
--permissions "authenticated:read"
# Allow users with 'admin' role full access
dab update Book \
--permissions "admin:*"
Configuración resultante
{
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "authenticated",
"actions": ["read"]
},
{
"role": "admin",
"actions": ["*"]
}
]
}
}
}
Paso 4: Configuración de roles en el proveedor de identidades
DAB espera roles en una roles reclamación. Configure el proveedor de identidades para incluir esta declaración.
Okta: Agregar grupos como roles
- En la consola de administración de Okta, vaya a Api de seguridad>.
- Seleccione el servidor de autorización.
- Vaya a la pestaña Notificaciones .
- Agregue una notificación:
-
Nombre:
roles - Incluir en el tipo de token: Token de acceso
- Tipo de valor: Grupos
- Filtro: seleccione los grupos que desea incluir.
-
Nombre:
Auth0: Agregar roles con una acción
- En el panel de Auth0, vaya a Acciones>Biblioteca.
- Cree una nueva acción (desencadenador posterior al inicio de sesión).
- Agregue código para incluir roles:
exports.onExecutePostLogin = async (event, api) => {
const roles = event.authorization?.roles || [];
if (roles.length > 0) {
api.accessToken.setCustomClaim('roles', roles);
}
};
- Implemente la acción y agréguela al flujo de inicio de sesión.
Sugerencia
Para obtener instrucciones detalladas sobre cómo configurar notificaciones JWT con Okta, consulte Implementación de notificaciones avanzadas de JWT con el SDK de Okta.
Paso 5: Probar la configuración
Inicie el generador de Data API:
dab startAdquiera un token de su proveedor de identidad. Use el SDK del proveedor o una herramienta como Postman.
Inspeccione el token en jwt.io para comprobar lo siguiente:
- La
audafirmación coincide con la audiencia configurada. - La
issreclamación coincide con el emisor configurado. - La
rolesreclamación contiene los valores esperados.
- La
Llame a la API:
curl -X GET "http://localhost:5000/api/Book" \ -H "Authorization: Bearer <your-token>"Para usar un rol personalizado, incluya el
X-MS-API-ROLEencabezado :curl -X GET "http://localhost:5000/api/Book" \ -H "Authorization: Bearer <your-token>" \ -H "X-MS-API-ROLE: admin"
Detalles de validación de JWT
Data API Builder valida estos aspectos del JWT:
| Check | Description |
|---|---|
| Signature | Validado mediante claves de firma detectadas a través de la entidad configurada jwt.issuer (metadatos de OpenID Connect /JWKS) |
| Emisor | Debe coincidir exactamente con la configuración jwt.issuer |
| Audiencia | Debe coincidir exactamente con la configuración de jwt.audience |
| Expiración | El token no debe estar caducado (exp reclamo) |
| No antes | El token debe ser válido (nbf declaración, si está presente) |
Solución de problemas
| Síntoma | Causa posible | Solución |
|---|---|---|
401 Unauthorized |
Desajuste del emisor | Compruebe que la afirmación coincide exactamente (incluida la barra diagonal final) |
401 Unauthorized |
Desajuste de audiencia | Compruebe que la reclamación coincide con su valor configurado aud |
401 Unauthorized |
Token expirado | Adquisición de un token nuevo |
401 Unauthorized |
Metadatos no disponibles | Asegúrese de que DAB pueda llegar <issuer>/.well-known/openid-configuration |
403 Forbidden |
Rol no presente en el token | Adición del rol a la configuración de IdP |
403 Forbidden |
Falta la reclamación de roles | Configura tu IdP para incluir una roles reclamación |
403 Forbidden |
Nombre de notificación incorrecto | DAB usa el tipo de reclamación roles (fijo, no configurable) |
Importante
DAB actualmente utiliza el tipo de declaración roles para todas las comprobaciones de roles. Este valor está codificado de forma codificada y no se puede cambiar a groups, permissionsu otros nombres de notificación. Configure el proveedor de identidad para emitir roles en un atributo denominado roles.
Formatos de emisor comunes
| Provider | Formato del emisor |
|---|---|
| Okta |
https://<domain>.okta.com o https://<domain>.okta.com/oauth2/default |
| Auth0 |
https://<tenant>.auth0.com/ (tenga en cuenta la barra diagonal final) |
| Azure AD B2C | https://<tenant>.b2clogin.com/<tenant-id>/v2.0/ |
| Keycloak | https://<host>/realms/<realm> |
Ejemplo de configuración completa
Configuración de Okta
{
"$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
"data-source": {
"database-type": "mssql",
"connection-string": "@env('SQL_CONNECTION_STRING')"
},
"runtime": {
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "0oa1234567890abcdef",
"issuer": "https://dev-12345.okta.com"
}
}
}
},
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "authenticated",
"actions": ["read"]
},
{
"role": "editor",
"actions": ["create", "read", "update"]
}
]
}
}
}
Configuración de Auth0
{
"$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
"data-source": {
"database-type": "mssql",
"connection-string": "@env('SQL_CONNECTION_STRING')"
},
"runtime": {
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "https://my-api.example.com",
"issuer": "https://my-tenant.auth0.com/"
}
}
}
},
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "authenticated",
"actions": ["read"]
},
{
"role": "admin",
"actions": ["*"]
}
]
}
}
}