OpenID Connect (OIDC): ID Tokens, Sesiones y Federación de Identidad
De la autenticación del usuario a la validación de ID Tokens, UserInfo, niveles de assurance, SSO y logout federado
Edición en profundidad - material de estudio y consulta profesional
Por João Ricardo Dutra••Material íntegro
Autenticación federada en una aplicación empresarial
Figura de apertura: comunica un evento de autenticación verificable e interoperable al cliente.
Principio central
El demuestra un evento de autenticación para el cliente; El autoriza el acceso al resource server.
Edición en profundidad: material de estudio y consulta profesional.
Presentación del capítulo
El capítulo anterior profundizó en 2.0 como marco de autorización delegada. permite a un cliente obtener autoridad limitada para acceder a un resource server, pero, por sí solo, no define una forma estandarizada de comunicar al cliente que un usuario ha sido autenticado. OpenID Connect agrega esta capa de identidad mediante el uso de y mecanismos de , introduciendo el de openid, el , las estandarizadas, la , el y las reglas de validación específicas.
Esta distinción es decisiva en las arquitecturas empresariales. El está destinado a la ; el está destinado al cliente que inició la autenticación. Una aplicación web puede validar el y crear su propia sesión, mientras presenta separados a . Reenviar el al como si fuera una credencial confunde a los destinatarios, aumenta la exposición de los datos personales y crea validaciones incorrectas.
también organiza cuestiones que van más allá del primer inicio de sesión: niveles de autenticación, , step-up, identidad federada, consentimiento de , identificadores de sujetos, de metadata, rotación de claves, sesiones distribuidas y cierre de sesión. En entornos con múltiples tenants y proveedores, la seguridad depende de asociar cada con el issuer correcto y evitar que los metadata o claves de un dominio se apliquen a otro.
Este capítulo detalla el flujo de con desde una perspectiva , la anatomía y validación del , , state, , , , , identificadores de sujeto, sesiones y mecanismos de cierre de sesión. También relaciona conceptos con aplicaciones web, , , aplicaciones nativas, Axway , Microsoft Entra y Azure Management.
Cómo estudiar este capítulo
En cada flujo, etiquete cuatro destinatarios: navegador, cliente , y . Luego, asocie cada artefacto con el destinatario correcto: , , , , de sesión y de cierre de sesión.
Objetivos de aprendizaje
Explique por qué OpenID Connect es una capa de identidad construida sobre 2.0.
Diferenciar , , , authorization server y resource server.
Describa el flujo del con openid, state, y .
Interprete y valide , incluidos , , aud, , exp, iat, , , y .
Distinga , , , y respuesta .
Comprender los y de identidad solicitados, esenciales y voluntarios.
Diseñe identificadores public y pairwise sin utilizar el correo electrónico como clave inmutable.
Relacione , , y con , políticas de incremento y riesgo.
Distinguir sesión en el , sesión en el cliente y autorización ante .
Compare RP-Initiated, Front-Channel y .
Utilice y con validación de issuers, algoritmos y rotación de claves.
Diagnosticar fallas en aplicaciones, y entornos federados.
Estructura del capítulo
17.1 como capa de identidad sobre 2.0
17.2 Roles, y artefactos
17.3 La solicitud de autenticación y el de openid
17.4 Flujo de con
17.5 : finalidad, formato y
17.6 Validación segura del
17.7 state, , , y at_hash
17.8 y de identidad
17.9 de
17.10 Subject identifiers: public y pairwise
17.11 , , , y
17.12 , step-up y contexto de autenticación
17.13 Sesiones en el OP, en el RP y frente a las
17.14
17.15 Front-Channel y
17.16 , metadata y
17.17 Registro de clientes y redirect
17.18 Federación de identidades y cadena de confianza
17.19 Multi-tenant, múltiples issuers y vinculación de cuentas
17.20 Aplicaciones web, , y aplicaciones nativas
17.21 en , Axway y Azure
17.22 Amenazas y hardening
17.23
17.24 Estudios de casos y laboratorios
Resumen, lista de verificación, ejercicios, glosario y referencias.
17.1 como capa de identidad sobre 2.0
OpenID Connect define una capa de identidad que permite al cliente verificar la identidad del usuario basándose en la autenticación realizada por un authorization server que también actúa como . El protocolo reutiliza el de autorización, el y las grants de 2.0, pero agrega semántica de autenticación y un conjunto de mensajes y validaciones propias.
La activación de se produce cuando la solicitud contiene el de openid. Sin este valor, la transacción sigue siendo y el cliente no debe asumir que recibirá un . Otros , como perfil, correo electrónico, dirección y teléfono, solicitan conjuntos estandarizados de , pero no reemplazan el de openid.
El principal resultado de la autenticación es el , una afirmación de seguridad sobre el evento de autenticación y el identificador del usuario en el contexto de ese issuer. El cliente valida esta afirmación y decide crear o actualizar una sesión local. El no es una búsqueda de directorio en tiempo real y no garantiza que todos los atributos permanezcan actualizados durante toda la sesión.
Distinción esencial
responde "¿qué autoridad se le dio a este cliente para acceder a un recurso?". responde "¿qué usuario fue autenticado para este cliente, por qué issuer y bajo qué condiciones?". Un sistema puede utilizar ambos en la misma transacción sin confundir sus .
17.2 Roles, y artefactos
El Usuario Final es la persona autenticada. La , o RP, es el cliente que solicita y consume autenticación. El , u OP, autentica al usuario y emite . En muchas plataformas, el mismo producto desempeña las funciones de OP y authorization server, pero el análisis conceptual continúa separando la autenticación para el cliente y la autorización para las .
El de autorización interactúa con el navegador para iniciar sesión, dar consentimiento y regresar al redirect . El recibe el a través del back-channel y devuelve los . El es un recurso protegido al que se accede con un . El de publica metadata y jwks_uri hace referencia a las claves públicas utilizadas en la verificación de firmas.
Los artefactos tienen diferentes ciclos de vida. El es corto y de un solo uso. El describe la autenticación para el RP. El representa autoridad ante un resource server. El le permite obtener nuevos según la política. Las mantienen sesiones en el OP o RP y no deben tratarse como equivalentes a .
Tabla 1 - Cada artefacto tiene su propio destinatario y propósito.
Elemento
Destinatario principal
Propósito
Authorization code
Token endpoint
Representa temporalmente la autorización y vincula el front-channel al back-channel.
ID Token
Relying Party
Comunicar el contexto de identidad y autenticación al cliente.
Access token
Resource server/API
Autorizar operaciones protegidas.
Refresh token
Authorization server
Obtener nuevos tokens sin repetir toda la interacción.
Respuesta UserInfo
Relying Party
Entregar claims autorizadas sobre el usuario.
Cookie del OP
OpenID Provider
Mantener la sesión de autenticación federada.
Cookie del RP
Aplicación cliente
Mantener la sesión de la aplicación local.
Figura 1: El code pasa a través del navegador, pero los se obtienen del a través de un canal directo.
17.3 Solicitud de autenticación y openid
La solicitud es una solicitud de autorización más requisitos de identidad. Los parámetros habituales incluyen client_id, response_type, redirect_uri, , state, , code_challenge y code_challenge_method. Otros parámetros, como , , login_hint, ui_locales y acr_values, impulsan la experiencia deseada o el nivel de autenticación, siempre que sean compatibles con el OP.
El redirect_uri debe coincidir con un valor registrado previamente. Las comparaciones flexibles, los comodines amplios y las redirecciones derivadas de externos aumentan el riesgo de secuestro del y phishing. El cliente debe generar state, y code_verifier con suficiente entropía para cada intento y asociarlos con la transacción local antes de redirigir el navegador.
El parámetro de debe contener openid. Los adicionales indican grupos de que el cliente solicita, pero el OP aún aplica la política, el consentimiento y la minimización. Solicitar el perfil no garantiza que todas las del conjunto se devolverán en el ; algunos pueden aparecer en o ser omitidos.
En el flujo recomendado, el navegador se redirige al de autorización, el OP autentica al usuario y devuelve un al redirect del cliente. El cliente valida el estado y envía el code al junto al code_verifier. Un confidential client también se autentica en el utilizando un mecanismo compatible, preferiblemente una credencial asimétrica o un método apropiado para el entorno.
vincula el code a la instancia que inició la transacción. El code_challenge se envió en la solicitud inicial y el code_verifier solo se revela en el intercambio. Incluso si un atacante intercepta el code, no puede intercambiarlo sin el verificador. no reemplaza el estado ni el : cada valor protege una relación diferente.
La respuesta del puede contener un , un , un token_type, expires_in y, según la política, un . El cliente no debe crear una sesión solo porque recibió 200. Primero valida la respuesta, el , el issuer, la audience, la firma, la ventana de tiempo, el y otros requisitos de flujo.
Figura 2: El es una afirmación destinada al cliente , no una credencial universal.
17.5 : finalidad, formato y
El es un que contiene sobre la autenticación del usuario. Está firmado por el OP y, en escenarios específicos, también puede cifrarse para el cliente. La firma proporciona integridad y autenticación del origen; no ofrece confidencialidad. Cualquier confidencial incluido en un firmado únicamente puede ser leído por quien obtenga el valor.
Los fundamentales incluyen , que identifica al issuer; , que identifica al usuario localmente ante el issuer; aud, que identifica al cliente destinatario; exp e iat, que definen la validez y la emisión. Dependiendo del flujo y la solicitud, aparecen , , , , , at_hash y .
El cliente debe utilizar la combinación y como clave externa estable. El correo electrónico, el teléfono y el nombre son atributos modificables y pueden reciclarse. En arquitecturas multi-tenant, el tenant total o issuer también participa en la identidad; usar solo sin contexto puede producir colisiones entre remitentes.
Incluso cuando ambos son y comparten algunas , sus destinatarios y su semántica son diferentes. La debe validar el emitido a su audience; el cliente valida el emitido a su client_id.
Figura 3: La verificación criptográfica es solo un paso de la validación contextual.
17.6 Validación segura del
El cliente debe comparar exactamente con el issuer esperado. Luego selecciona una clave confiable para verificar la firma y restringe los algoritmos a aquellos que se aceptan explícitamente. El valor alg del por sí solo no puede decidir la política. El kid ayuda con la selección de claves, pero no reemplaza la confianza en el jwks_uri asociado con el issuer.
El aud del debe contener el client_id del RP. Cuando hay múltiples audiences, identifica a la parte autorizada y debe ser evaluado de acuerdo con las reglas del protocolo. exp debe estar en el futuro dentro de la tolerancia del reloj; iat no puede estar absurdamente distante; se valida cuando la solicitud requiere una de autenticación.
Si se envió , el debe contener el mismo valor asociado con el intento local. Las declaraciones de seguridad como y solo deben usarse cuando su semántica esté documentada y el issuer confíe en ella. La presencia de una cadena similar a “ ” no crea, en sí misma, un nivel de seguridad interoperable.
Las bibliotecas maduras realizan la mayoría de las comprobaciones, pero aún requieren la configuración correcta del issuer, el ID del cliente, los algoritmos, los redirect y el almacenamiento de estado. Decodificar el manualmente y observar las no equivale a validarlo.
Tabla 2: La aceptación del ID Token depende de las validaciones criptográficas y semánticas.
Verificación
Fracaso evitado
Evidencia
iss exacto
Aceptar token de un issuer no autorizado
Issuer obtenido de una configuración confiable.
Firma y alg
Token manipulado o algoritmo inadecuado
JWK correspondiente y lista de algoritmos permitidos.
aud/azp
Token emitido a otro cliente
client_id presente y parte autorizada y consistente.
exp / iat / auth_time
Replay fuera de la ventana o sesión anterior
Reloj sincronizado y tolerancia limitada.
nonce
Reutilización o reemplazo de respuestas de autenticación
Valor por transacción almacenado en el cliente.
acr/amr
Aceptar la autenticación por debajo del requisito
Semántica definida por el issuer y política local.
17.7 state, , , y at_hash
state vincula la respuesta de autorización a la transacción iniciada por el cliente y ayuda a proteger contra y la inyección de respuesta. vincula el a la solicitud de autenticación y reduce la . vincula el intercambio del a la instancia que produjo el code_challenge. Los tres valores pueden coexistir y no deben reutilizarse entre intentos.
En los tipos de respuesta que devuelven artefactos a través del de autorización, y at_hash pueden vincular, respectivamente, el y el al . La validación utiliza parte del calculado con un algoritmo relacionado con la firma. En un flujo de code puro, es posible que la biblioteca no requiera ambos, pero el implementador debe seguir las reglas del response_type realmente utilizado.
Almacenar estos valores solo en variables globales o en localStorage sin vincularse a un intento permite colisiones y ataques por pestañas concurrentes. El cliente debe mantener un registro de transacciones con issuer, client_id, redirect_uri, estado, , code_verifier, tiempo y parámetros esperados, eliminándolo en caso de éxito o vencimiento.
Valor Qué vincula Dónde se valida
Tabla 3: Los valores de correlación protegen distintas relaciones de flujo.
Valor
Qué vincula
¿Dónde está validado?
state
Solicitud de autorización y respuesta
En el callback, antes de procesar code o error.
nonce
Solicitud y ID Token
Dentro del ID Token después de la validación de la firma.
code_verifier
Authorization request y token request
En el token endpoint por parte del OP.
c_hash
Authorization Code y ID Token
En el cliente cuando lo requiera el response_type.
at_hash
Access token y ID Token
En el cliente cuando lo requiera el response_type.
17.8 y de identidad
define estandarizados para perfil, correo electrónico, dirección y número de teléfono. como perfil y correo electrónico son atajos para solicitar conjuntos de . La respuesta efectiva depende del OP, el consentimiento, la política y el lugar de entrega. Un puede aparecer en el , en la respuesta o en ambos.
El parámetro de permite solicitar de forma individual e indicar si son imprescindibles. “Esencial” expresa el requerimiento del cliente, pero no obliga a un OP incapaz a fabricar los datos; La transacción puede fallar o continuar según el soporte y la política. También se pueden informar los valores esperados para algunas , lo que requiere cuidado con la interoperabilidad.
La minimización es una propiedad de seguridad y privacidad. El cliente debe solicitar sólo los atributos necesarios y evitar persistir copias indefinidas. Los de grupos y roles pueden crecer, variar entre directorios o representar el estado administrativo; no deben ser tratados como sustitutos universales de la autorización de objetos y las reglas de dominio.
El es un recurso protegido que devuelve sobre el usuario asociado con el . El cliente llama a este con un o un mecanismo sender-constrained, según el perfil adoptado. La respuesta suele ser firmada o sin firmar, según la configuración y los metadata del OP.
El cliente debe validar que el de es idéntico al del . Esta comparación evita que las de otro usuario se asocien con la sesión actual. El hecho de que la conexión utilice no elimina esta validación semántica.
es útil cuando el cliente necesita que no deben aumentar el o cuando el OP aplica la entrega selectiva. Sin embargo, cada llamada agrega dependencia de la red y manejo de indisponibilidad. El diseño debe decidir qué datos se requieren al iniciar sesión, cuáles se pueden cargar a pedido y durante cuánto tiempo se pueden almacenar.
Cuidado con los datos personales
Los y la pueden contener datos personales. No registre respuestas completas en , o herramientas de error. Prefiera identificadores mínimos, enmascaramiento y controles de retención alineados con un propósito.
17.10 Subject identifiers: public y pairwise
El proporciona un identificador único local que nunca se reasigna dentro del issuer. En el modo público, el mismo usuario tiende a recibir el mismo para diferentes clientes. En modo pairwise, el OP calcula un identificador diferente por sector de cliente, reduciendo la posibilidad de correlacionar al usuario entre aplicaciones independientes.
Los identifiers son relevantes para la privacidad, pero requieren vinculación de cuentas, soporte y planificación de migración. Dos clientes del mismo sector pueden compartir el mismo según la política de OP; Clientes de diferentes sectores reciben valores diferentes incluso para la misma persona.
La base de datos de la aplicación debe conservar el issuer y el subcomo una clave federada, manteniendo atributos como el correo electrónico en campos actualizables. Cuando hay una migración de issuer, fusión de tenants o cambio de estrategia de sujeto, la asociación necesita un procedimiento explícito y pruebas adicionales; no debe inferirse únicamente de la coincidencia del correo electrónico.
Tabla 4 - El identificador del sujeto debe equilibrar la estabilidad y la privacidad.
Estrategia
Ventaja
Atención operativa
Public subject
Facilita la correlación entre clientes de un mismo issuer.
Aumenta la posibilidad de seguimiento entre aplicaciones.
Pairwise subject
Reduce la correlación entre sectores de clientes.
Requiere identificador de sector y planificación de vinculación.
Correo electrónico como clave
Suena sencillo para los negocios.
Es modificable, se puede reciclar y no es un identificador seguro.
iss + sub
Identidad federada estable en el dominio del issuer.
Debe conservarse en migraciones y multi-tenant.
17.11 , , , y
representa una clase o contexto de autenticación logrado, según el vocabulario del issuer o de un perfil. enumera los métodos utilizados, como contraseña, OTP, biometría o hardware, pero los valores y combinaciones deben interpretarse de acuerdo con la documentación del OP. registra cuándo se produjo la autenticación activa.
El cliente puede usar para exigir que la autenticación no supere un determinado umbral. Cuando se solicita , se vuelve esencial para la verificación. interacción de controles rápidos: ninguno intenta una autenticación silenciosa; el inicio de sesión fuerza una nueva autenticación; el consentimiento fuerza una nueva decisión de consentimiento; select_account solicita la selección de cuenta, según sea compatible.
acr_values expresa preferencia por contextos de autenticación. En operaciones de alto riesgo, el cliente puede iniciar un nuevo flujo con un requerimiento más fuerte. La política no debe depender únicamente de los parámetros enviados por el front-end; el OP y el cliente deben validar que el contexto devuelto satisface la regla de operación.
Tabla 5: Las claims y los parámetros describen el recencia y contexto de autenticación.
Claim / parámetro
Significado
Uso típico
acr
Clase de contexto de autenticación lograda
Comparar con el nivel requerido por la operación.
amr
Métodos utilizados en la autenticación.
Auditorías y políticas específicas del issuer.
auth_time
Instante de la autenticación activa
Validar max_age y antigüedad.
max_age
Edad máxima de autenticación aceptable
Fuerce la reautenticación para operaciones sensibles.
prompt
Comportamiento de interacción solicitado
none, login, consent o select_account.
17.12 , step-up y contexto de autenticación
significa utilizar factores independientes, no sólo dos pasos del mismo factor. Normalmente, RP no implementa autenticadores; solicita o verifica un contexto emitido por el OP. Para una operación de alto riesgo, el cliente puede iniciar un paso adelante y requerir una nueva autenticación con o una política equivalente.
La decisión debe considerar la autenticación ya realizada, el riesgo actual, el dispositivo, el recurso y el tiempo transcurrido desde la última prueba. Un usuario puede tener una sesión válida en el OP, pero aún necesita autenticación adicional para autorizar el pago, cambiar credenciales o acceder a datos confidenciales.
El resultado del step-up debe vincularse a la operación o sesión adecuada. Aceptar un antiguo que contenía , sin evaluar y el contexto de la transacción, permite una reutilización indebida. En sistemas críticos, la confirmación comercial puede requerir controles más allá de , como firma transaccional o aprobación independiente.
Principio de assurance
No trate a y como cadenas universales. Definir qué valores puede emitir cada issuer, qué significan, cómo se auditan y qué operaciones aceptan cada nivel. En las federaciones, este mapeo debe ser parte del acuerdo de confianza.
Figura 4: , sesión local y autorización de son estados relacionados pero independientes.
17.13 Sesiones en el OP, en el RP y frente a las
La sesión en OP permite el Single Sign-On entre clientes que confían en el mismo proveedor. Generalmente está representado por una bajo el dominio del OP. Cuando otro RP envía una solicitud de autorización, el OP puede reutilizar la autenticación existente, siempre que la política, y lo permitan.
La sesión RP la crea la aplicación después de validar el . En una aplicación web tradicional o , una HttpOnly, Secure y SameSite hace referencia al estado en el servidor. En puro, las bibliotecas pueden mantener en el navegador, lo que aumenta la importancia de la protección y reduce las assurances de confidencialidad de los secretos.
La normalmente valida los con cada llamada y no conoce la del OP ni la del RP. La caducidad de la sesión local evita que el navegador realice más acciones, pero no necesariamente revoca los ya emitidos. Del mismo modo, revocar un no borra automáticamente todas las de la sesión.
El diseño de la sesión debe definir tiempos absolutos y de inactividad, renovación, rotación, revocación, reautenticación y comportamiento en múltiples dispositivos. La experiencia de "salir de todas partes" requiere inventario y coordinación entre sesiones y .
17.14
En el , el cliente redirige el navegador al de cierre de sesión del OP. Los parámetros comunes incluyen id_token_hint, post_logout_redirect_uri, client_id y state, según las reglas y el soporte del proveedor. El post_logout_redirect_uri debe estar registrado previamente para evitar la redirección abierta.
id_token_hint ayuda al OP a identificar la sesión y el cliente, pero no debe tratarse como un . State puede correlacionar el retorno posterior al cierre de sesión y la navegación segura. El RP debe limpiar su sesión local independientemente de si se produce la redirección final, evitando que una falla de la red mantenga al usuario aparentemente autenticado en la aplicación.
El cierre de sesión iniciado por el RP no garantiza por sí solo que todas las demás aplicaciones conectadas al OP estén cerradas. El OP puede ofrecer propagación por front-channel o por back-channel. La política del producto debe dejar claro si "salir" significa finalizar sólo la aplicación actual, la sesión del proveedor o todas las sesiones conocidas.
Ejemplo conceptual:
GET /logout?
id_token_hint=eyJ...
&post_logout_redirect_uri=https%3A%2F%2Fportal.example%2Fsigned-out
&state=bG9nb3V0LXRyYW5zYWN0aW9u HTTP/1.1
Host: id.example
Figura 5: Los mecanismos de cierre de sesión difieren según el canal utilizado y la dependencia del navegador.
17.15 Front-Channel y
El cierre de sesión del front-channel utiliza el agente de usuario para cargar las de cierre de sesión desde los RP. El mecanismo es sencillo y compatible con aplicaciones web, pero depende del navegador, de las y de la finalización de la navegación. Las restricciones a las e iframes de terceros pueden reducir la confiabilidad en algunos entornos.
El cierre de sesión del back-channel envía una solicitud directa desde el OP al registrado por el RP. El cuerpo contiene un de cierre de sesión firmado, con eventos e identificadores específicos como o . El RP valida issuer, audience, firma, hora, jti y evento antes de invalidar la sesión correspondiente. El debe ser idempotente, resistente y no depender de las del navegador.
Management y el de estado también pueden detectar cambios, pero el diseño debería preferir mecanismos finales respaldados por el ecosistema. Ningún cierre de sesión reemplaza el vencimiento breve del , la revocación cuando corresponda y la autorización continua para operaciones de alto riesgo.
Tabla 6: El cierre de sesión debe diseñarse como propagación de estado, no como una redirección única.
Mecanismo
Canal
Fortalezas
Limitaciones
RP-Initiated
Navegador del RP al OP
Experiencia de salida explícita.
No se propaga por sí solo a todos los RPs.
Front-Channel
Navegador del OP a los RPs
Implementación web directa.
Depende del agente de usuario, las cookies y la red.
Back-Channel
OP llama al endpoint de RP
No depende del navegador; más determinista.
Exige endpoint, validación y tratamiento resiliente.
Caducidad local
Control del propio RP
Siempre disponible y sencillo.
No cierra sesión en el OP ni en otros RP.
17.16 , metadata y
publica un documento de configuración en una dirección conocida derivada del issuer. El documento informa Authorization_endpoint, token_endpoint, UserInfo_endpoint, jwks_uri, end_session_endpoint cuando esté disponible, tipos de respuesta, , , métodos de autenticación del cliente y algoritmos admitidos.
El cliente debe iniciar el de un issuer previamente confiable y verificar que el issuer publicado en el documento coincida exactamente con lo esperado. No se debe aceptar un issuer proporcionado libremente por el usuario y, a partir de ahí, recuperar metadata sin política, ya que esto permite , confusión y confianza en proveedores no autorizados.
jwks_uri publica claves públicas. Las bibliotecas almacenan en caché y usan kid para seleccionar la clave. La rotación requiere un período de superposición: los firmados con la clave anterior pueden seguir siendo válidos mientras la nueva clave ya esté publicada. Ante un kid desconocido, el cliente puede actualizar de manera controlada, evitando bucles de red causados por maliciosos.
reduce la configuración manual, pero no hace que ningún sea confiable. El issuer raíz debe provenir de una configuración, lista de permitidos o cadena de federación validada; Los redireccionamientos y jwks_uri permanecen sujetos a restricciones de red y políticas.
17.17 Registro de clientes y redirect
El OP necesita conocer cada cliente: client_id, tipo de aplicación, redirect , post_logout_redirect_uri, métodos de autenticación, claves, y políticas. Los clientes públicos no pueden mantener un secreto confiable; Los clientes confidenciales necesitan proteger sus credenciales y prefieren la autenticación asimétrica cuando el riesgo lo amerita.
Los redirect deben ser precisos y utilizar , excepto las excepciones controladas para el bucle invertido de la aplicación nativa. Los esquemas de personalizados requieren protección contra colisiones y preferencia por enlaces de aplicaciones o enlaces universales cuando estén disponibles. Los comodines y la coincidencia amplia de prefijos pueden permitir que el se entregue a un destino controlado por el atacante.
El registro dinámico puede automatizar los ecosistemas, pero amplía la huella administrativa. Se hacen necesarias declaraciones de software, políticas, autenticación de registrantes, validación de metadata y gestión del ciclo de vida. En entornos empresariales típicos, el registro gobernado por catálogos y canalizaciones ofrece una mayor previsibilidad.
Tabla 7: la clasificación del cliente determina los posibles controles, no solo el nombre de la aplicación.
Tipo de cliente
Almacenamiento de credenciales
Recomendación
Web server / BFF
Puede proteger secretos o claves en el servidor
Code + PKCE y autenticación sólida en el token endpoint.
SPA en el navegador
No tiene un secreto confiable
Code + PKCE; Reduzca los tokens en el navegador y evalúe BFF.
Aplicación nativa
Utiliza el almacenamiento del sistema pero es un cliente público.
Code + PKCE con navegador externo y redireccionamiento seguro.
Daemon confidencial
Puede utilizar clave, certificado o identidad de carga de trabajo
Client Credentials para API; OIDC sólo cuando hay un usuario.
Figura 6: La federación se basa en una cadena explícita de metadata, claves, políticas y gobernanza.
17.18 Federación de identidades y cadena de confianza
La federación permite que una aplicación confíe en la autenticación realizada por otro dominio. En una relación bilateral, el RP configura directamente el issuer, los metadata, las claves y las reglas. En las federaciones multilaterales, las entidades y los trust anchors pueden publicar declaraciones y políticas firmadas que permitan resolver la cadena de confianza de forma escalable.
La confianza técnica no reemplaza el acuerdo organizacional. Es necesario definir onboarding, ownership y assurance, la respuesta a incidentes, la rotación de claves, la disponibilidad, la privacidad, la semántica de los y el cierre. Un OP puede emitir criptográficamente válidos y aun así proporcionar atributos que son incompatibles con la política del RP.
OpenID Federation 1.0 formaliza cadenas de confianza y políticas de metadata para ecosistemas con muchas entidades. La adopción debe considerar la madurez del producto, el perfil del sector y la necesidad real. En una empresa con pocos issuers, la configuración explícita puede ser más sencilla; En los ecosistemas gubernamental, financiero o sanitario, la federación multilateral puede reducir los acuerdos bilaterales.
17.19 Multi-tenant, múltiples issuers y vinculación de cuentas
Las aplicaciones multi-tenant pueden aceptar usuarios de varios directorios. La validación debe determinar el issuer autorizado para cada tenant y evitar que una clave válida de un tenant autentique identidades en otro. Los “comunes” o equivalentes facilitan el inicial, pero el final debe estar asociado con el issuer concreto y la política de tenancy.
La vinculación de cuentas conecta identidades federadas a una cuenta local. El proceso debe requerir una sesión ya autenticada y una nueva prueba en el segundo proveedor, con protección contra y confirmación clara. Vincular cuentas automáticamente porque tienen el mismo correo electrónico permite tomar el control de la cuenta cuando se reciclan dominios o direcciones.
En las migraciones, preserve el historial entre el issuer antiguo, el subdirector antiguo y la nueva identidad mediante una tabla de mapeo gobernada. Los registros de auditoría deben registrar qué identidad federada se utilizó, qué cuenta local resultó del vínculo y quién autorizó el vínculo.
Regla de issuers múltiples
Nunca elijas la clave de validación solo para el kid sin antes arreglar al issuer confiable. El mismo kid puede existir en diferentes dominios y los metadata de un issuer no deberían validar los de otro.
17.20 Aplicaciones web, , y aplicaciones nativas
Las aplicaciones web pueden mantener y credenciales en el servidor y exponer solo una de sesión protegida al navegador. Este modelo reduce la superficie de exfiltración de JavaScript, pero requiere protección contra , fijación de sesión, robo de y problemas de escalabilidad del estado.
Las son clientes públicos. El con reemplaza el flujo implícito como enfoque moderno, pero los siguen siendo accesibles en el contexto del navegador si se almacenan en el front-end. Se requiere una política de seguridad de contenido, reducción de dependencia, protección , cortos y un almacenamiento cuidadoso. El estándar transfiere el manejo de al servidor y ofrece al navegador una sesión con origen restringido.
Las aplicaciones nativas deben utilizar un navegador externo o una sesión de autenticación del sistema, no una vista web integrada que capture las credenciales. Los redireccionamientos utilizan enlaces de app links, universal links o loopback según la plataforma. es obligatorio en la práctica moderna y los deben rotarse y almacenarse en el mecanismo seguro del sistema cuando sean compatibles.
Tabla 8: El flujo es similar, pero la ubicación de ejecución cambia el modelo de amenaza.
Arquitectura
¿Dónde están los tokens?
Riesgo dominante
Web server
Backend del cliente
Sesión, CSRF, credencial de cliente y acceso al servidor.
SPA
Contexto del navegador
XSS, extensión maliciosa y persistencia de tokens.
BFF
backend; el navegador recibe cookies
CSRF, sesión BFF y confianza backend.
Aplicación nativa
Almacenamiento del dispositivo
Malware, secuestro de redireccionamiento y dispositivo comprometido.
17.21 en , Axway y Azure
Un puede actuar como para autenticar usuarios del portal o de la consola, como en arquitecturas específicas o como PEP que valida emitidos por el mismo ecosistema. Estos roles deben configurarse por separado. La validación del en una no corrige el error de utilizar el incorrecto; la sigue necesitando un destinado a su audience.
En Axway , los filtros y servicios le permiten actuar como proveedor o , crear y validar e integrar flujos de . El diseño debe separar las políticas de inicio de sesión interactivo de las políticas de protección de , mantener almacenes y certificados gobernados y validar el issuer, la audience, el y las según el rol desempeñado.
En Microsoft Entra, las aplicaciones registradas reciben client_id, redireccionan y configuraciones de . Azure Management normalmente protege las mediante la validación de con validate- o validate-azure-ad- . La política puede utilizar la configuración OpenID para obtener issuers y claves, pero debe requerir audience y adecuados; La simple validación criptográfica no reemplaza la autorización.
En portales de desarrolladores y consolas administrativas, puede proporcionar . Para las llamadas en runtime, la debe preservar la identidad del usuario y de la aplicación de forma controlada, eliminar externos equivalentes y, cuando sea necesario, emitir u obtener las credenciales adecuadas para el .
La aplicación cliente valida el y mantiene la sesión del usuario. La protege las validando y aplicando políticas. Mezclar estas responsabilidades produce audiences equivocadas y una exposición innecesaria de las .
17.22 Amenazas y hardening
La inyección de ocurre cuando un code obtenido en otra transacción se inserta en el del cliente. state, , , la validación del issuer y las reglas contra mix-up reducen el riesgo. El registro abierto o flexible de redirect permite el secuestro del code. puede robar en una , mientras que puede activar o logout en un contexto indebido.
La sustitución de ocurre cuando se acepta un o válido para otro cliente, issuer o propósito. La defensa es una validación estricta del issuer, audience, , tipo y contexto. Los algoritmos inesperados, las claves obtenidas de la indicada por el y el global por kid crean fallas criptográficas y de múltiples issuers.
Login asocia la sesión de la víctima con la cuenta del atacante, lo que hace que la víctima opere con una identidad incorrecta. state por transacción, la correlación de sesiones y la confirmación de cuenta reducen el riesgo. La vinculación automática de cuentas por correo electrónico es otra forma de error de identidad.
El cierre de sesión también presenta amenazas: redirección abierta, borrado parcial, del de cierre de sesión y denegación de sesión. post_logout_redirect_uri debe estar registrado; los de cierre de sesión necesitan firma, audience, eventos, jti y tiempo; Los deben ser idempotentes y limitar el abuso.
Tabla 9: El OIDC seguro depende de los vínculos entre transacciones, issuers, clientes y artefactos.
Amenaza
Error de implementación
Control principal
Issuer mix-up
Procesar respuesta sin fijar el OP esperado
Issuer por transacción, metadata confiables y validación exacta.
Code injection
Aceptar code sin vínculo con la tentativa
PKCE, state, nonce y callback correlacionada.
Sustitución de tokens
Aceptar JWT de otra audience o tipo
aud, azp, typ, issuer y finalidad del token.
Login CSRF
Crear sesión con respuesta no iniciada por el usuario
state fuerte y registro de transacción.
XSS en SPA
Tokens accesibles al script comprometido
BFF, CSP, reducción de scripts y token corto.
Account linking indebido
Vincular por coincidencia de e-mail
Reautenticación con ambas identidades y confirmación explícita.
Replay de cierre de sesión
Aceptar logout token repetido o antiguo
jti, exp/iat, firma e idempotencia.
17.23 basada en evidencia
El diagnóstico debe separar el front-channel, el , la validación del , la creación de sesiones y el acceso a la . Un error en la podría ser un state divergente, un redirect incorrecto o un code expirado. Un error en el podría ser la autenticación del cliente, , la reutilización de code o el reloj. Un inicio de sesión exitoso seguido de un 401 en la generalmente indica que falta un , una audience incorrecta o una política de .
Recopile correlation ID, issuer esperado, client_id, redirect normalizada, response_type, , marcas de tiempo, kid, algoritmo, audiences y resultado de cada validación. Nunca registre completos, authorization codes, code_verifiers, secretos o . Para el análisis, utilice sintéticas o irreversibles controlados.
Los problemas intermitentes después de la rotación de claves pueden indicar , nodos con relojes divergentes o sin superposición. Los fallos en un solo tenant sugieren issuer, consentimiento, o política de tenancy. El cierre de sesión que funciona en una aplicación y no en otra debe analizarse por tipo de canal, / , registrado y estado local del RP.
Tabla 10 - Los síntomas deben estar asociados con la etapa exacta del flujo.
Code expirado/reutilizado, redireccionamiento o verificador divergente
Tiempo, redirect_uri y hash del verifier.
Firma no válida
kid nuevo, issuer incorrecto, caché JWKS
Metadata, JWKS actuales y reloj.
Audience no válida
ID Token emitido a otro client_id
aud, azp y client_id configurados.
nonce inválido
Respuesta de otro intento o replay
nonce almacenado por transacción.
El inicio de sesión funciona, la API devuelve 401
Falta el access token, está caducado o tiene una audience incorrecta
Header Authorization y política de API Gateway.
Cierre de sesión parcial
El mecanismo no se propagó o el RP no borró la sesión
logs de sid/sub, endpoint y cierre de sesión.
Lista de verificación de telemetría sin exposición de credenciales
Registro seguro de diagnóstico:
- transaction_id y correlation_id
- issuer esperado y client_id
- redirect_uri normalizada
- state_match, nonce_match y pkce_result
- alg, kid, aud, azp y tiempos sin el token bruto
- sesión creada, renovada o invalidada
- código de error del OP y etapa que respondió
17.24 Estudios de caso
Caso 1: aceptado por la
Un portal envía el en el encabezado de autorización a . El tiene una firma válida y una aud igual al client_id del portal, no a la . La está configurada para verificar únicamente la firma y el vencimiento, por lo que acepta la llamada. El comienza a confiar en un destinado a otro componente y sin de recursos.
La solución es solicitar un para la audience de , validar el issuer, la audience, el tipo y los en la y mantener el solo en el cliente. La migración debería tener en cuenta a los consumidores existentes y evitar que ambos tipos sean aceptados indefinidamente.
Caso 2: falla intermitente después de la rotación de la llave
El OP comienza a firmar nuevos con otro kid, pero un nodo de aplicación mantiene en caché durante un período de tiempo excesivo. Algunos usuarios reciben con la nueva clave y fallan; otros continúan autenticándose con antiguos. Reiniciar el nodo parece solucionarlo temporalmente.
El diagnóstico compara la edad del kid, del nodo de servicio y del caché. La solución incluye caché con actualización controlada en kids desconocidos, anulación de claves por issuer, observabilidad y biblioteca actualizada. No debes recuperar la clave proporcionada por el .
Caso 3: Adquisición de cuenta mediante vinculación automática
Una aplicación vincula automáticamente una nueva identidad federada a la cuenta local cuando el correo electrónico coincide. Un dominio libera una dirección antigua, que se asigna a otra persona. El nuevo propietario se autentica con el OP y recibe acceso a la cuenta histórica.
La solución requiere + como identidad, proceso de vinculación explícito con reautenticación y confirmación, alertas de usuario y seguimiento de auditoría. El correo electrónico sigue siendo un atributo de contacto, no una prueba de continuidad de identidad.
Caso 4: Cerrar sesión cierra el portal, pero no cierra otras aplicaciones
El portal borra su y llama al de cierre de sesión del OP, pero otro RP mantiene activa la sesión local. La expectativa de "cierre de sesión global" no se documentó y el OP no envió el cierre de sesión del front-channel ni del back-channel.
El diseño se revisó para registrar del back-channel, emitir , validar de cierre de sesión y definir el comportamiento de indisponibilidad. La interfaz ahora distingue entre "salir de esta aplicación" y "cerrar sesión corporativa".
Laboratorios de observación
Laboratorio 1: flujo completo
Utilice un proveedor y cliente de laboratorio autorizado.
Capture la solicitud de autorización sin registrar credenciales reales.
Identifique el state, , code_challenge, code y respuesta del .
Valide el con la biblioteca y compare , aud, y tiempo.
Laboratorio 2 - matriz de validación
Cree sintéticos o fixtures firmadas con una clave de laboratorio.
Prueba de issuer incorrecta, audience incorrecta, vencimiento, divergente y algo no permitido.
Registre qué validación rechazó cada .
Confirme que el cliente no crea sesión después de cualquier falla.
Laboratorio 3: y minimización
Solicite openid, perfil y correo electrónico en un entorno de prueba.
Compare los del y .
Valida que sea el mismo en ambas respuestas.
Reduzca los y observe qué datos no se entregan.
Laboratorio 4: sesión y cierre de sesión
Cree dos RP de laboratorio bajo el mismo OP.
Observe el y diferencie las de OP y RP.
Pruebe el cierre de sesión local, iniciado por RP y, si es compatible, en el back-channel.
Registre qué sesiones permanecen activas en cada escenario.
Laboratorio 5 - Rotación
Publique dos claves de laboratorio y cambie la clave activa.
Caché de notas, kid y aceptación de antiguos.
Prueba de actualización controlada en kid desconocido.
Establezca ventanas superpuestas y alertas de fallos.
Resumen del capítulo
OpenID Connect agrega autenticación interoperable a 2.0. El de openid activa el protocolo y el comunica un evento de autenticación a la . El sigue utilizándose para la . Confundir los dos artefactos es un defecto arquitectónico, aunque ambos son .
El flujo de con utiliza state, y code_verifier para proteger diferentes relaciones. El cliente valida los requisitos de issuer, firma, algoritmo, audience, , tiempo, y seguridad antes de crear la sesión. como , y solo son útiles cuando se conoce su semántica.
entrega autorizados y debe mantener el mismo del . La identidad federada debe persistir mediante + ; El correo electrónico no es una clave inmutable. Los sujetos public y pairwise ofrecen diferentes propiedades de correlación y privacidad.
La sesión OP, la sesión RP y los son estados independientes. El cierre de sesión requiere una política explícita y puede utilizar RP-Initiated, Front-Channel o Back-Channel. y facilitan la configuración y la rotación, pero es necesario controlar el issuer raíz y la cadena de confianza.
En las , protege los inicios de sesión de aplicaciones y portales, mientras que las normalmente requieren . Axway y Azure ofrecen recursos para el y la validación, pero la configuración de la audience, las y la autorización sigue siendo responsabilidad de la arquitectura.
Siguiente paso del curso
El Capítulo 18 profundizará en , , y : serialización, algoritmos, identificadores de claves, , rotación, validación, cifrado de y dificultades de implementación.
Checklist de OpenID Connect
El de openid solo está presente en los flujos de autenticación .
El cliente utiliza un con y un redirect exacto.
state, y code_verifier son únicos por transacción y se eliminan después de su uso.
El issuer está configurado o resuelto por cadena de confianza autorizada.
La firma se valida con el algoritmo permitido y la clave correcta.
aud y se comparan con el client_id esperado.
exp, iat y usan reloj sincronizado y tolerancia limitada.
El permanece en el cliente y no reemplaza el a la .
El de se compara con el del .
La cuenta federada utiliza + , no el correo electrónico, como clave externa.
y tienen una semántica documentada por issuer.
Las OP y RP tienen política de protección, caducidad y renovación.
El cierre de sesión local, el iniciado por RP, el front-channel y el back-channel tienen un comportamiento definido.
y tienen caché, actualización controlada y protección de red.
El multi-tenant valida una política concreta de issuer y tenancy.
Los registros no almacenan , codes, secrets, verifiers ni .
Las bibliotecas se mantienen actualizadas y se prueban con casos negativos.
Ejercicios
Explique por qué 2.0 no es, de forma aislada, un protocolo de inicio de sesión.
Diferenciar OP, RP, authorization server y resource server.
Describa el papel del openid, state, y .
Listar las validaciones obligatorias de un .
Explique cuándo es necesario analizar .
Compare el , el y la respuesta .
Explique por qué + es mejor que el correo electrónico para vincular cuentas.
Compare identificadores de sujetos public y pairwise.
Modelo mejorado usando , y .
Diferenciar sesión en OP, sesión en RP y validez del .
Compare RP-Initiated, Front-Channel y .
Describa cómo manejar la rotación de sin reiniciar las aplicaciones.
Proponer una política multi-tenant que evite confusión de issuers.
Explique por qué la debe validar el , no el .
Cree un script de para invalid_state y invalid_grant.
Glosario
Tabla 11 - Vocabulario esencial del capítulo.
Término
Definición
acr
Referencia de clase de contexto de autenticación; clase de contexto de autenticación.
amr
Referencias a métodos de autenticación; métodos utilizados en la autenticación.
auth_time
Hora a la que se produjo la autenticación de usuario activo.
Authorization Code
Artefacto corto intercambiado en token endpoint.
azp
Parte autorizada; cliente autorizado cuando aud contiene múltiples valores.
Back-Channel Logout
Cierre de sesión directo desde el OP al endpoint del RP.
c_hash
Hash que vincula el authorization code al ID Token en los flujos aplicables.
Discovery
Mecanismo de obtención de metadata del OpenID Provider.
End-User
Persona autenticada por el OpenID Provider.
Front-Channel Logout
Cierre de sesión propagado por el navegador entre OP y RP.
ID Token
JWT destinado al RP para comunicar el evento de autenticación.
iss
Issuer; identificador del issuer del token.
JWKS
Conjunto JSON de claves públicas para validación criptográfica.
max_age
Edad máxima de autenticación aceptable.
nonce
Valor que vincula la solicitud de autenticación y el ID Token.
OpenID Provider
Entidad que autentica al usuario y emite ID Tokens.
Pairwise subject
sub diferente por sector de clientes para reducir la correlación.
prompt
Parámetro que controla la interacción como ninguno, inicio de sesión o consentimiento.
Public subject
sub reutilizado entre clientes según política del issuer.
Relying Party
Cliente OIDC que confía en la autenticación del OP.
RP-Initiated Logout
Solicitud de cierre de sesión iniciada por el cliente.
sid
Identificador de sesión utilizado en los mecanismos de cierre de sesión.
sub
Identificador de sujeto; identificador de usuario en el issuer.
UserInfo
Endpoint protegido que devuelve claims autorizadas del usuario.
Anexo A - Matriz de arquitectura
Tabla 12 - La elección depende de la plataforma, riesgo, experiencia y capacidad del proveedor.
Escenario
Arquitectura inicial
Controles esenciales
Aplicación web corporativa
Code + PKCE con sesión del lado del servidor
autenticación de cliente, cookie segura, CSRF, nonce y cierre de sesión.
SPA de bajo riesgo
Code + PKCE
CSP, token corto, sin secreto y protección XSS.
SPA de mayor riesgo
BFF + Code + PKCE
tokens en el backend, cookie HttpOnly y CSRF.
Aplicación nativa
Code + PKCE con navegador externo
app link / universal link, almacenamiento seguro y rotación de refresh tokens.
Portal multi-tenant
Issuer por tenant y política explícita
aud/azp, tenancy, consentimiento y vinculación segura de cuentas.
Operación con step-up
Nueva authorization request con assurance
max_age, acr, tiempo de autenticación y enlace a la operación.
SSO con cierre de sesión corporativo
Sesión OP + RP-Initiated + back-channel
sid, token de cierre de sesión, idempotencia y observabilidad.
federación multilateral
OpenID Federation o perfil sectorial
trust anchors, políticas de metadata y gobernanza.
Referencias técnicas
Fundación OpenID. OpenID Connect Core 1.0 incorpora el conjunto de erratas 2.
Fundación OpenID. OpenID Connect 1.0 incorpora el conjunto de erratas 2.
Fundación OpenID. Cierre de sesión iniciado por OpenID Connect RP 1.0. 2022.
Fundación OpenID. Cierre de sesión del front-channel de OpenID Connect 1.0. 2022.
Fundación OpenID. OpenID Connect 1.0, con erratas incorporadas. 2023.
Fundación OpenID. Gestión de sesiones de OpenID Connect 1.0. 2022.
Fundación OpenID. OpenID Federation 1.0. 2026.
. 6749: el marco de autorización de 2.0. 2012.
. 7636: clave de prueba para el intercambio de códigos por parte de clientes públicos de . 2015.
. 7519: web . 2015.
. 8414: Metadata del authorization server 2.0. 2018.
. 8252: 2.0 para aplicaciones nativas. 2017.
. 8725: Mejores prácticas actuales de web . 2020.
. 9207: Identificación del issuer del authorization server 2.0. 2022.
. 9700: mejores prácticas actuales para la seguridad de 2.0. 2025.
Microsoft aprende. Plataforma de identidad de Microsoft y protocolo OpenID Connect.
Microsoft aprende. Políticas de validación- y validación-azure-ad- de Azure Management.
Documentación Axway. y OpenID Connect; Filtros OpenID Connect.
. Hoja de referencia de seguridad de 2.0 y hoja de referencia de Management.
Nota de actualización
es un conjunto de especificaciones y perfiles en evolución. Antes de implementar , cierre de sesión, federación o assurance, confirme la versión admitida por el proveedor, la biblioteca y la . Los borradores de Internet y las extensiones propietarias no reemplazan automáticamente las especificaciones finales.