RFC 8414

Estándares Y Rfcs Security Notes Jan 6, 2025 JAVASCRIPT

Definicion

Imagina que estás construyendo una app que necesita integrarse con OAuth, pero estás trabajando con múltiples proveedores de identidad - Google, Microsoft, el servidor de autenticación interno de tu empresa. Cada uno tiene URLs ligeramente diferentes para autorización, intercambio de tokens y recuperación de claves. Tradicionalmente, hardcodearías todas estas URLs, las actualizarías cada vez que un proveedor cambiara algo, y esperarías que nada se rompiera. RFC 8414 resuelve este dolor de cabeza con descubrimiento automático.

Esta especificación define una forma estándar para que los servidores de autorización OAuth publiquen su configuración en una URL bien conocida. En lugar de hardcodear https://auth.google.com/oauth/authorize y esperar que no cambie, tu app puede obtener https://auth.google.com/.well-known/oauth-authorization-server y conseguir una lista completa de todos los endpoints, características soportadas y capacidades. El servidor te dice dónde está todo.

El documento de descubrimiento contiene todo lo que un cliente necesita: el endpoint de autorización, endpoint de token, ubicación del JWKS (JSON Web Key Set) para verificar tokens, tipos de concesión soportados, scopes disponibles, y mucho más. Esto hace tu integración más robusta (los endpoints se actualizan automáticamente), más portable (el mismo código funciona con cualquier servidor compatible), y más mantenible (sin URLs hardcodeadas dispersas por tu código base).

Ejemplo

Construir una característica de “Login con”: Cuando implementas login social, en lugar de investigar y hardcodear los endpoints de cada proveedor, obtienes su documento de descubrimiento. Google, Microsoft, Apple - todos publican su configuración OAuth en una URL predecible.

Integración SSO empresarial: Las empresas frecuentemente cambian proveedores de identidad o actualizan sus configuraciones. Con descubrimiento, tu app recoge los cambios automáticamente. Cuando TI actualiza el servidor de autenticación, tu app simplemente funciona sin redespliegue.

Aplicaciones SaaS multi-tenant: Si tu app soporta múltiples organizaciones con sus propios proveedores de identidad, el descubrimiento es esencial. Solo necesitas la URL base de cada cliente - el documento de descubrimiento te dice todo lo demás.

Autenticación de apps móviles: Las apps móviles especialmente se benefician del descubrimiento porque las actualizaciones de apps son lentas de desplegar. Si un proveedor de autenticación cambia un endpoint, las apps usando descubrimiento se adaptan inmediatamente.

Analogia

El Directorio del Edificio: Cuando entras a un gran edificio de oficinas, consultas el directorio en el lobby para encontrar en qué piso está la empresa que visitas. No memorizas números de piso para cada negocio - consultas el directorio. RFC 8414 es ese directorio para endpoints OAuth.

El Menú del Restaurante: No llamas a un restaurante con anticipación para preguntar “¿sirven platos vegetarianos?” o “¿qué métodos de pago aceptan?”. Miras el menú cuando llegas. El documento de descubrimiento es el menú del servidor OAuth - listando todas las opciones y endpoints disponibles.

El Mostrador de Información del Aeropuerto: En un aeropuerto desconocido, encuentras el mostrador de información para aprender dónde está todo: puertas, salas VIP, aduana, baños. El descubrimiento es el mostrador de información para OAuth - una consulta te dice la ubicación de cada servicio.

La Tarjeta de la Habitación del Hotel: Cuando haces el check-in, tu tarjeta llave viene con una funda de papel mostrando las amenidades del hotel y sus ubicaciones: piscina en piso 3, gimnasio en piso 2, restaurante en piso 1. El documento de descubrimiento es esa funda informativa para un servidor de autenticación.

Code Example


// Endpoint de descubrimiento
GET /.well-known/oauth-authorization-server [HTTP/1.1](https://reference.apios.info/es/terms/http-1-1/)
Host: auth.example.com

// Respuesta
{
  "issuer": "https://auth.example.com",
  "authorization_endpoint": "https://auth.example.com/authorize",
  "token_endpoint": "https://auth.example.com/token",
  "jwks_uri": "https://auth.example.com/.well-known/jwks.json",
  "response_types_supported": ["code", "token"],
  "grant_types_supported": [
    "authorization_code",
    "client_credentials",
    "refresh_token"
  ],
  "token_endpoint_auth_methods_supported": [
    "client_secret_basic",
    "client_secret_post"
  ],
  "scopes_supported": ["openid", "profile", "email"]
}

// Usando descubrimiento en código
const metadata = await fetch(
  'https://auth.example.com/.well-known/oauth-authorization-server'
).then(r => r.json());

const authUrl = metadata.authorization_endpoint;

Notas de Seguridad

SECURITY NOTES

Requisitos Principales:

  • Siempre obtén los metadatos sobre HTTPS.
  • Valida que el claim issuer coincida con el valor esperado.
  • Cachea los metadatos pero implementa actualización periódica.

Mejores Prácticas:

  • Verifica que los endpoints descubiertos usen HTTPS.
  • No confíes ciegamente en todos los campos de metadatos - valida contra una configuración conocida y correcta.
  • Implementa un fallback si el descubrimiento falla..