OpenID Connect

OpenID Connect, lo esencial

OAuth 2.0 concede acceso a un recurso. OpenID Connect añade identidad: quién es la persona que inicia sesión.

OAuth 2.0 y OpenID Connect: la diferencia

OAuth 2.0 responde a «¿tiene esta aplicación permiso para acceder a estos datos?». Produce un access token. No dice nada sobre la persona.

OpenID Connect (OIDC) es una capa de identidad sobre OAuth 2.0. Añade un token de identidad (ID token), un endpoint userinfo y scopes estándar (openid, profile, email). Si solicita el scope openid, está haciendo OIDC; si no, OAuth simple.

Los actores

  • Usuario (resource owner): la persona.
  • Cliente (RP, relying party): la aplicación que quiere conocer a la persona o acceder a una API.
  • Proveedor OIDC (OP, authorization server): Entra ID, Okta, Keycloak, Google… autentica y emite los tokens.
  • API (servidor de recursos): recibe el access token y lo valida.

Los tres tokens

  • ID token: un JWT firmado que dice quién ha iniciado sesión (sub), emitido por quién (iss), para quién (aud = su client_id), cuándo (iat, exp) y repite su nonce. Está pensado para la aplicación, nunca para la API.
  • Access token: la llave que la aplicación presenta a una API. Opaco o JWT, de corta duración. La aplicación no debe leerlo.
  • Refresh token: permite obtener un nuevo access token sin volver a pedírselo a la persona. De larga duración, hay que protegerlo como una contraseña.

Los endpoints

/.well-known/openid-configurationDiscovery: un documento JSON que lista todos los demás endpoints y las capacidades del proveedor. Un cliente serio solo necesita la dirección del issuer.
jwks_uriLas claves públicas usadas para verificar la firma de los tokens (rotación posible).
authorization_endpointAdónde envía el navegador a la persona para autenticarse.
token_endpointDonde la aplicación intercambia un código (u otro) por tokens, de servidor a servidor.
userinfo_endpointLa información de la persona, con un access token.
introspection, revocationCompruebe si un token sigue activo (RFC 7662); invalídelo (RFC 7009).
end_session_endpointCierre de sesión solicitado por la aplicación (RP-initiated logout).
device_authorization_endpointIniciar un flujo «device» (RFC 8628).

Las comprobaciones de un cliente serio

En un ID token: firma (claves de jwks_uri), iss exacto, aud contiene su client_id, exp no superado, nonce idéntico al enviado, at_hash/c_hash cuando están presentes. En la respuesta: state idéntico y PKCE (code_verifier) con el flujo de código.

¿Quiere verlo en directo? ID-Kit ejecuta cada flujo y le muestra los tokens.