Capacidad

Federación OIDC / OAuth 2.0

Un relying party de OpenID Connect completo en el borde de acceso — tokens de identidad verificados, flujos a prueba de replay y enrutamiento de IdP por tenant.

Los IdP corporativos y de consumo modernos — Entra ID, Okta, Auth0, Google Workspace, GitHub, Keycloak — hablan OpenID Connect sobre OAuth 2.0. Para las aplicaciones nuevas, el enfoque correcto no es mantener una base de datos de usuarios paralela; es conectarse directamente a esos IdP. TR7 AAM actúa como un relying party OIDC conforme a estándares frente a la aplicación. El flujo de código de autorización se inicia con PKCE, nonce y state ligado a la sesión; el usuario inicia sesión en el IdP con el MFA y la política que ese IdP aplica; el IdP devuelve un código de autorización a AAM; AAM intercambia el código por tokens, obtiene el JWKS del IdP y valida la firma, la audience, el issuer, la ventana de validez y el nonce del token de identidad (ID token) antes de extraer la identidad. Los claims del ID token verificado se combinan con la respuesta del endpoint userinfo y se mapean al identificador de sesión canónico de AAM. Un único gateway de AAM puede enrutar distintas aplicaciones a distintos IdP y distintos tenants de la misma aplicación a distintos IdP de forma simultánea. Resultado: el resto del motor de acceso — acceso condicional, confianza del dispositivo, MFA en el borde, Backend SSO — se monta sobre la sesión OIDC. Cada paso se audita; los resultados de validación del ID token (firma, nonce, audience, issuer, validez) son eventos de auditoría de primera clase; así, el equipo de seguridad puede responder a la pregunta "quién inició sesión a través de qué IdP y con qué resultado" desde un único flujo.

OIDC + OAuth 2.0
Relying party conforme a estándares — código de autorización, PKCE, ID tokens verificados con JWKS, defensas de nonce y state.
S256 PKCE
Método de code-challenge por defecto — los códigos interceptados no pueden ser canjeados por el atacante.
Caché JWKS compartida
TTL de 1 hora entre procesos de trabajo e instancias del gateway; refresco ante fallo para la rotación de claves del IdP.

OIDC parece simple desde fuera — está lleno de trampas cuando se integra por aplicación

OpenID Connect, construido sobre OAuth 2.0, es el protocolo de identidad federada dominante para los stacks modernos. Todos los grandes IdP corporativos lo soportan; todos los IdP de fuerza laboral en la nube lo ofrecen; todos los frameworks de aplicación modernos proporcionan una librería para él. La parte que se cree fácil es asumir que unas pocas líneas de código SDK por aplicación serán suficientes.

En la práctica, un relying party OIDC que transporta tráfico de producción real tiene una larga lista de cosas que hacer bien. La firma del ID token debe validarse contra el JWKS publicado por el IdP, seleccionando la clave correcta por su kid, y la caché debe refrescarse cuando el IdP rota las claves. El claim de audience debe coincidir con el client ID configurado. El issuer debe coincidir con el issuer esperado configurado. La ventana de validez debe verificarse con una tolerancia limitada de desfase de reloj. El nonce dentro del ID token debe coincidir con el nonce que AAM envió en la solicitud de autorización — si no coincide, no es un error de parseo, es un intento de replay.

La capa subyacente de OAuth 2.0 tiene sus propias trampas. El state debe ligarse a la sesión del usuario como protección CSRF y tener un TTL corto. Debe usarse PKCE (preferiblemente S256), de modo que un código de autorización interceptado no pueda ser canjeado por el atacante. Los ataques de mixup — donde el atacante engaña al relying party para que hable con el IdP equivocado — se neutralizan ligando el callback a un IdP específico y validando el issuer en consecuencia. En una integración SDK pura, ninguna de estas defensas es automática.

Otra forma de fallo es incrustar el SDK OIDC directamente en cada aplicación. Cada aplicación arrastra entonces sus propias decisiones de confianza, su caché de JWKS, sus logs de auditoría y su configuración de IdP por separado. Un único cambio de IdP se convierte en un despliegue multiaplicación coordinado. El MFA, el acceso condicional, la confianza del dispositivo y el comportamiento de cierre de sesión se resuelven por separado para cada aplicación, a menudo de forma inconsistente.

El lado operativo es igual de importante. La actualización del documento de discovery del IdP, el manejo de la rotación de claves de firma, el enrutamiento de IdP por tenant, los distintos mapeos de claims para distintas aplicaciones y los flujos de cierre de sesión no son pequeños detalles que se añaden después. Son piezas fundamentales para que la federación OIDC funcione de forma segura y sostenible.

El lugar correcto es el borde de acceso. OIDC debe validarse en un único punto; debe gestionarse en la misma capa que la autenticación, el MFA, el acceso condicional, la confianza del dispositivo y el Backend SSO. Así, las aplicaciones no cargan con la complejidad del protocolo de federación; solo reciben una identidad verificada, limpia y confiable.

Gestionar OIDC correctamente no es solo conectarse a un IdP con un SDK. Es validar el ID token en un único punto — en el mismo motor que el MFA, el acceso condicional, la confianza del dispositivo y el Backend SSO — de forma conforme a estándares, auditarlo y trasladarlo de forma segura a las aplicaciones.

Nuestro enfoque

Un único gateway de AAM termina OIDC correctamente en el borde; el resto del motor de acceso se monta sobre él.

Relying party OpenID Connect completo más cliente OAuth 2.0

Flujo de código de autorización con PKCE, validación de firma del ID token mediante JWKS, defensa de replay ligada al nonce, defensa CSRF ligada al state, aplicación de audience/issuer/validez. El mismo motor habla OAuth 2.0 puro para los IdP que no entregan ID token; así, tanto los proveedores que solo ofrecen tokens como los proveedores OIDC completos comparten una única base de código.

Enrutamiento de IdP por aplicación y por tenant

Un único gateway de AAM puede enrutar distintas aplicaciones a distintos IdP y distintos tenants de la misma aplicación a distintos IdP de forma simultánea. La selección de IdP se hace por solicitud según el contexto de la aplicación o el tenant — sin un gateway separado por IdP, sin selector manual para el usuario.

Los ataques de replay, CSRF y mixup se neutralizan por defecto

El nonce liga el ID token a la solicitud de autorización que lo pidió; el state liga el callback a la sesión del usuario; PKCE liga el canje del código al cliente público original. Ninguno de estos es un flag opcional que el integrador pueda olvidar — son el propio flujo por defecto.

Coordinado con MFA, acceso condicional, confianza del dispositivo y Backend SSO

Una autenticación OIDC no opera de forma aislada — se compone con el MFA en el borde (si el IdP no aplicó step-up), las expresiones de acceso condicional, la evaluación continua de confianza y la inyección de Backend SSO hacia el backend. El ID token se convierte en una entrada de la sesión de AAM; no en toda la sesión.

Capacidades

Relying party OIDC conforme a estándares más las características operativas que hacen la federación segura y gestionable a escala.

Flujo de código de autorización con PKCE (S256 por defecto)

AAM inicia el flujo de código de autorización de OAuth 2.0 con PKCE habilitado por defecto — code_challenge_method=S256, un code_verifier fresco para cada solicitud, nunca reutilizado. Un atacante que no genere el verifier no puede canjear por tokens un código de autorización interceptado. PKCE plano sigue disponible para los IdP que lo exigen; S256 es el valor por defecto configurado.

Validación de la firma del ID token contra el JWKS del IdP

Cuando llega el callback, AAM obtiene el JWKS del IdP, selecciona la clave de firma a partir de la cabecera kid del ID token y valida la firma del ID token con el algoritmo indicado en la cabecera (RS256 y el resto de la familia estándar). Un fallo de caché sobre el kid refresca el JWKS de inmediato; así, una rotación de claves del IdP no deja inicios de sesión válidos bloqueados.

Audience, issuer, validez y nonce — no solo se parsean, se aplican

El claim de audience del ID token debe incluir el client ID configurado; el issuer debe coincidir con el issuer esperado configurado; la ventana de validez (exp/nbf) se aplica con una tolerancia limitada de desfase de reloj; el nonce debe coincidir con el nonce que AAM envió en la solicitud de autorización. Una discrepancia de nonce no se trata como un error de parseo, sino como una señal de replay con su propio evento de auditoría.

Caché de JWKS compartida con refresco ante fallo para la rotación de claves

Las respuestas de JWKS se cachean con un TTL de 1 hora en un almacén compartido entre procesos de trabajo e instancias del gateway. El acierto de caché elimina el viaje de red en cada inicio de sesión; un fallo de caché sobre el kid solicitado dispara un refresco inmediato desde el JWKS URI; así, la rotación rutinaria de claves del IdP no produce interrupciones en el inicio de sesión.

Parámetros OIDC: scope, display, max_age, ui_locales, acr_values

Los parámetros de autorización OIDC estándar son configuración de primera clase: scope (openid se añade automáticamente), display para la experiencia de inicio de sesión del IdP, max_age para reautenticación forzada, ui_locales para páginas de IdP localizadas y acr_values para solicitar una clase de contexto de autenticación específica — útil para pedir al IdP que aplique step-up MFA.

Perfiles de proveedor integrados más IdP totalmente personalizados

Los perfiles integrados vienen con valores por defecto razonables para los proveedores comunes (endpoints well-known, JWKS URIs, hábitos de scope). La ruta de IdP personalizado, donde los endpoints, scopes y mapeos se introducen manualmente, sigue disponible para cualquier proveedor OIDC u OAuth 2.0 conforme a estándares.

Los claims del ID token se combinan con userinfo; los claims firmados tienen prioridad

Tras la validación de la firma, los claims del ID token se combinan con la respuesta del endpoint userinfo del IdP. En caso de conflicto, los claims firmados del ID token se consideran prioritarios sobre los campos sin firmar de userinfo; así, un atacante que manipule la respuesta de userinfo no puede alterar silenciosamente un claim de identidad firmado.

Hoja de ruta — RP-Initiated Logout, back-channel logout, registro dinámico de cliente

RP-Initiated Logout (el cierre de sesión front-channel firmado de la especificación OIDC) y el back-channel logout para las notificaciones de terminación de sesión del IdP están en la hoja de ruta. El registro dinámico de cliente OIDC — incorporar una nueva aplicación registrándola automáticamente en el IdP — también está planificado. La infraestructura de sesión y auditoría ya está preparada para soportar estos flujos.

Profundidad operativa

La mecánica que mantiene una federación OIDC segura, actualizada y observable.

01

Ligado de state con TTL de 10 minutos y control de sesión

El parámetro state de OAuth se almacena contra la sesión del usuario con un TTL de 10 minutos. Cuando llega el callback, AAM verifica que el state pertenece a la misma sesión que inició el flujo — un atacante que reproduzca un valor de state en el navegador de otro usuario es rechazado con un evento de auditoría OAUTH_STATE_MISMATCH.

02

Auditoría en cada omisión de validación del ID token — por causa raíz

Cuando la validación de la firma del ID token se omite por una razón operativa — JWKS inaccesible, sin kid coincidente, JWK corrupto, JWKS URI ausente — un evento de auditoría dedicado registra la causa raíz específica. Los operadores pueden distinguir una interrupción transitoria de JWKS de una configuración incorrecta o de un tipo de clave no soportado sin releer los logs de tiempo de ejecución.

03

Tolerancia de desfase de reloj limitada por IdP

Los ID tokens llevan marcas de tiempo iat, nbf y exp. Los relojes reales se desvían; AAM aplica una tolerancia de desfase de reloj limitada (60 segundos por defecto para el validador JWT subyacente); así, una pequeña desviación no rechaza inicios de sesión válidos, mientras que las grandes desviaciones — indicador de configuración incorrecta o de replay — siguen siendo rechazadas.

04

Intercambio de tokens y userinfo con timeouts de red endurecidos

Las solicitudes de intercambio de tokens y de userinfo contra el IdP usan timeouts limitados de conexión, DNS y totales; así, un IdP lento o que no responde no puede mantener ocupados a los trabajadores del gateway. El intercambio de tokens opera con un presupuesto total de 30 segundos; userinfo opera con un presupuesto de 15 segundos; ambos tienen presupuestos de conexión y DNS más cortos; así, los fallos fallan rápido.

05

Auditoría por evento correlacionada con la sesión de AAM

Cada paso del flujo OIDC — inicio del flujo, éxito del callback, intercambio de tokens (qué tokens se devolvieron), resultado de la validación de firma del ID token, resultado de la obtención de JWKS — se registra con un ID de correlación que se vincula de vuelta a la sesión de AAM y a los backend(s) detrás de ella. La pregunta "quién inició sesión a través de qué IdP y cuándo" se responde con una sola consulta.

06

Hoja de ruta — descubrimiento automático de proveedor y telemetría de rotación de JWKS

El descubrimiento automático de proveedor OIDC mediante el endpoint .well-known/openid-configuration y la alerta al operador cuando los endpoints descubiertos o los conjuntos de claves de firma cambian están en la hoja de ruta. La telemetría de rotación de JWKS — métricas de cambio de clave de firma, pistas de días-hasta-la-expiración de la clave actual, runbooks de rotación automática — también está planificada.

Qué equipos lo usan

IdP corporativos modernos (Entra ID, Okta, Auth0, Keycloak)

IdP corporativos existentes que ya autentican a la fuerza laboral mediante OIDC. AAM se conecta como un relying party sin pedir al equipo del IdP que cambie nada. Las aplicaciones nuevas se unen a la federación no añadiendo un nuevo SDK OIDC a cada base de código, sino añadiendo un registro en AAM.

IdP sociales de fuerza laboral (Google Workspace, GitHub)

Herramientas internas que se autentican contra el tenant de Google Workspace de la organización o herramientas para desarrolladores que usan GitHub como IdP. AAM habla OIDC con Google y OAuth 2.0 con GitHub — desde el mismo motor — y mapea cada uno al formato de sesión canónico de AAM.

SaaS multitenant con IdP OIDC por tenant

Aplicaciones SaaS donde cada cliente trae su propio IdP OIDC. Un único gateway de AAM se sitúa frente a todos los tenants; el tráfico de cada tenant se enruta al IdP de ese tenant. Añadir un tenant no es un despliegue, sino añadir un cambio de configuración al repositorio de registro de IdP.

MFA en el borde y acceso condicional sobre un IdP OIDC

Algunos IdP autentican pero no aplican step-up MFA o acceso condicional de forma uniforme para cada aplicación. AAM acepta la autenticación del IdP, y luego monta su propio MFA, expresiones de acceso condicional y evaluación continua de confianza sobre ella antes de conceder acceso a la aplicación.

Preguntas frecuentes

¿Con qué IdP se federa AAM mediante OIDC y OAuth 2.0?
Cualquier IdP OIDC u OAuth 2.0 conforme a estándares. En la práctica, esto incluye Entra ID (Azure AD), Okta, Auth0, Keycloak, Google Workspace, GitHub y cualquier IdP personalizado que ofrezca endpoints estándar. Los perfiles integrados vienen con valores por defecto razonables para los proveedores comunes; la ruta de IdP personalizado, donde los endpoints, scopes y mapeos se introducen manualmente, sigue disponible para cualquier proveedor conforme a estándares.
¿Cómo se defiende AAM contra los ataques de replay del ID token, CSRF y mixup?
El nonce liga el ID token a la solicitud de autorización que lo pidió — una discrepancia es una señal de replay dedicada con su propio evento de auditoría. El state liga el callback a la sesión del usuario con un TTL de 10 minutos — el replay entre sesiones es rechazado. PKCE (S256 por defecto) liga el canje del código al cliente original — un código de autorización interceptado no puede ser canjeado por tokens por el atacante. Los ataques de mixup se neutralizan ligando el callback a un IdP específico y validando el claim de issuer en consecuencia.
¿Qué ocurre cuando el IdP rota las claves de firma?
El JWKS se cachea en un almacén compartido con un TTL de 1 hora. Cuando llega el callback, AAM selecciona de la caché la clave de firma a partir de la cabecera kid del ID token. Si el kid no está en el conjunto cacheado — que es lo que ocurre justo después de una rotación de claves del IdP — AAM dispara un refresco inmediato desde el JWKS URI y reintenta la selección. Una rotación rutinaria de claves no produce interrupciones en el inicio de sesión.
¿Cuál es la diferencia entre OIDC y OAuth 2.0 puro en esta página?
OIDC añade una capa de identidad sobre OAuth 2.0: junto al access token se devuelve un ID token firmado que contiene claims de identidad. AAM habla ambos. Para los proveedores OIDC, el ID token se valida contra el JWKS y se combina con la respuesta de userinfo; los claims firmados tienen prioridad. Para los proveedores OAuth 2.0 puro (sin ID token), AAM se basa únicamente en la respuesta de userinfo para la identidad y aplica las mismas defensas de auditoría, state y PKCE alrededor del flujo.
¿Qué ocurre con la identidad después de que AAM consume los tokens?
Los claims del ID token verificado y la respuesta de userinfo se combinan y se mapean a los campos de sesión canónicos de AAM (nombre de usuario, correo electrónico, grupos, nombre para mostrar, atributos personalizados). El resto del motor de acceso razona sobre esta sesión — gating de MFA, expresiones de acceso condicional, evaluación continua de confianza, inyección de Backend SSO hacia el backend. La aplicación recibe la identidad en el formato que espera mediante Backend SSO; el protocolo OIDC se detiene en el borde de AAM.

OIDC bien hecho, en el borde

Conectemos AAM a su IdP OIDC — corporativo, en la nube o self-hosted — y montemos el resto del motor de acceso con MFA, acceso condicional, confianza del dispositivo y Backend SSO sobre el ID token verificado.