DEV Community

Cover image for Tutorial OpenID Connect: Guía Completa Paso a Paso
Roobia
Roobia

Posted on • Originally published at apidog.com

Tutorial OpenID Connect: Guía Completa Paso a Paso

OpenID Connect se ha convertido en el estándar de la industria para una autenticación segura y moderna, y para el inicio de sesión único (SSO). Si buscas una guía clara y práctica para implementar OpenID Connect, esta referencia te ayudará a entender los conceptos clave, el flujo de autenticación y cómo aplicarlo paso a paso en proyectos reales.

Prueba Apidog hoy

¿Qué es OpenID Connect? (Conceptos básicos)

OpenID Connect es un protocolo de autenticación basado en OAuth 2.0. Mientras OAuth 2.0 gestiona la autorización (acceso a recursos), OpenID Connect se enfoca en la autenticación: verificar la identidad del usuario y entregar información básica del perfil usando tokens seguros.

Ventajas principales de OpenID Connect:

  • Autenticación Segura: Evita sistemas caseros y vulnerables.
  • SSO (Single Sign-On): Permite acceso a múltiples apps con un solo proveedor de identidad.
  • Interoperabilidad: Compatible con web, móvil y APIs.
  • Perfil Estandarizado: Los datos del usuario llegan en tokens JWT de manera consistente.

Aprende a implementar estos beneficios paso a paso a continuación.

Conceptos Clave

Antes de comenzar, aclara estos términos básicos:

  • Proveedor de Identidad (IdP): Servicio que autentica usuarios (Google, Auth0, Okta, etc.).
  • Cliente: Tu app web, móvil o API que solicita autenticación.
  • Usuario Final: El usuario humano autenticado.
  • Servidor de Autorización: Normalmente igual que el IdP; emite tokens tras autenticación exitosa.
  • Token de ID: JWT con la identidad del usuario.
  • Token de Acceso: (OAuth 2.0) Para acceder a APIs protegidas.
  • Documento de Descubrimiento: Endpoint con metadatos/URLs de autenticación.

Flujo de Autenticación OpenID Connect: Guía paso a paso

1. El Usuario Inicia Sesión

El usuario hace clic en "Iniciar sesión con OpenID Connect" en tu app.

2. Redirección al Servidor de Autorización

Tu app redirige el navegador a la URL de autorización del IdP con estos parámetros:

  • client_id
  • redirect_uri
  • scope (debe incluir openid)
  • state
  • response_type (usa code para Authorization Code Flow)

Ejemplo de URL:

https://idp.example.com/authorize?
  client_id=TU_CLIENT_ID
  &redirect_uri=https://tuapp.com/callback
  &scope=openid%20profile%20email
  &response_type=code
  &state=randomState123

3. El Usuario se Autentica

El IdP muestra su pantalla de login. El usuario ingresa credenciales y da consentimiento.

4. Redirección de vuelta con código de autorización

Tras login exitoso, el IdP redirige al usuario a tu redirect_uri con un código de autorización y el state:

https://tuapp.com/callback?code=CODIGO_AUTH&state=randomState123

5. Intercambio de código por tokens

El backend de tu app envía una solicitud POST al endpoint de tokens del IdP:

POST /token
Host: idp.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&code=CODIGO_AUTH
&redirect_uri=https://tuapp.com/callback
&client_id=TU_CLIENT_ID
&client_secret=TU_CLIENT_SECRET

6. Tokens devueltos

El IdP responde con:

  • id_token (JWT con info del usuario)
  • access_token (para API)
  • Opcional: refresh_token
{
  "access_token": "eyJ...abc",
  "id_token": "eyJ...xyz",
  "expires_in": 3600,
  "token_type": "Bearer"
}

7. Validación y uso de tokens

Valida el id_token (firma, audiencia, expiración) e inicia sesión al usuario. Usa el access_token si necesitas llamar APIs protegidas.

Flujos de OpenID Connect y mejores prácticas

Este tutorial se centra en el flujo recomendado para web:

Flujo de Código de Autorización

  • Más seguro (tokens no quedan expuestos en el navegador).
  • Permite validación en servidor.
  • Ideal para apps con backend ("clientes confidenciales").

No uses el Flujo Implícito: Está obsoleto por riesgos de seguridad. Para SPAs usa Authorization Code Flow + PKCE.

Decodifica el Token de ID

El id_token es un JWT. Decódifícalo para extraer información del usuario:

{
  "iss": "https://idp.example.com",
  "sub": "1234567890",
  "aud": "TU_CLIENT_ID",
  "exp": 1712345678,
  "iat": 1712341678,
  "email": "usuario@example.com",
  "name": "Jane Doe"
}
  • iss: Emisor (IdP)
  • sub: ID de usuario
  • aud: Tu client_id
  • exp: Fecha de expiración
  • email, name: Claims estándar

Tip: Valida la firma y los claims antes de autenticar al usuario.

Ejemplo Práctico en Python

Implementa OpenID Connect sin SDKs externos:

Paso 1: Construir la URL de autorización

import urllib.parse

params = {
    "client_id": "TU_CLIENT_ID",
    "redirect_uri": "https://tuapp.com/callback",
    "response_type": "code",
    "scope": "openid profile email",
    "state": "randomState123"
}
auth_url = "https://idp.example.com/authorize?" + urllib.parse.urlencode(params)
print(auth_url)

Paso 2: Intercambiar el código por tokens

import requests

token_data = {
    "grant_type": "authorization_code",
    "code": "CODIGO_AUTH",
    "redirect_uri": "https://tuapp.com/callback",
    "client_id": "TU_CLIENT_ID",
    "client_secret": "TU_CLIENT_SECRET"
}
resp = requests.post("https://idp.example.com/token", data=token_data)
tokens = resp.json()
print(tokens)

Paso 3: Decodificar y validar el id_token

import jwt

id_token = tokens['id_token']
decoded = jwt.decode(id_token, options={"verify_signature": False})
print(decoded)

Nota: Para producción, valida siempre la firma con la clave pública del IdP.

Escenarios Prácticos de Uso

1. Single Sign-On (SSO) para múltiples apps

Con OpenID Connect puedes implementar SSO para todas tus apps usando un solo login. Sigue el flujo explicado para una integración robusta.

2. Autenticación de APIs

Valida el id_token en el backend de cada petición. Herramientas como Apidog facilitan diseñar y probar endpoints protegidos.

3. Login Social

Para "Iniciar sesión con Google" o Microsoft, integra sus endpoints OpenID Connect siguiendo el mismo flujo.

4. Apps móviles

Usa el mismo flujo en móviles, implementando deep links o navegadores integrados para la autenticación.

Pruebas y Debugging con Apidog

Una buena integración requiere pruebas sólidas. Apidog es una plataforma de desarrollo API que acelera el diseño, simulación y pruebas:

  • Prueba solicitudes de tokens: Usa la interfaz visual para simular y validar respuestas de OpenID Connect.
  • Mockea endpoints IdP: Simula endpoints y prueba tu lógica sin depender de proveedores reales.
  • Documenta tus APIs: Crea documentación clara para equipos de frontend y seguridad.

Apidog reduce errores y acelera la implementación de autenticación robusta en tus flujos OpenID Connect.

Mejores Prácticas

  • Valida siempre el id_token: Firma, emisor, audiencia y expiración.
  • Usa HTTPS: No transmitas tokens por canales inseguros.
  • Gestiona secretos: Protege client_secret y tokens.
  • Maneja errores correctamente: Controla inicios de sesión fallidos y tokens expirados.
  • Mantente actualizado: OpenID Connect evoluciona; revisa librerías y documentación regularmente.

Conclusión y Próximos Pasos

Ya tienes una guía completa para aplicar OpenID Connect en tu stack. Dominar este estándar mejora la seguridad y experiencia de usuario en cualquier app moderna.

¿Qué sigue?

  1. Registra tu app en un IdP de confianza (Google, Auth0, Okta, etc.).
  2. Implementa el Authorization Code Flow siguiendo este tutorial.
  3. Prueba tus flujos usando Apidog para máxima seguridad y fiabilidad.
  4. Explora temas avanzados: Descubrimiento, registro dinámico de clientes, federación de identidad.

Con estos pasos puedes construir autenticación moderna y segura en cualquier aplicación. ¡Feliz codificación!

Top comments (0)