OAuth 2.0
Definition
OAuth 2.0 (Open Authorization 2.0) es un protocolo estándar de la industria para autorización que permite a las aplicaciones obtener acceso limitado a cuentas de usuario en un servicio HTTP. Funciona delegando la autenticación de usuario al servicio que aloja la cuenta de usuario y autorizando a aplicaciones de terceros para acceder a esa cuenta de usuario.
Why It Matters
OAuth 2.0 resuelve el problema de compartir credenciales entre aplicaciones. En lugar de dar tu contraseña a una aplicación de terceros, OAuth te permite otorgar acceso limitado sin revelar tus credenciales.
Beneficios clave:
- Seguridad - Sin compartir contraseñas
- Permisos granulares - Las aplicaciones solicitan solo los scopes necesarios
- Acceso revocable - Los usuarios pueden revocar el acceso en cualquier momento
- Estandarización - Ampliamente adoptado en toda la industria
How It Works
sequenceDiagram
autonumber
participant User as Usuario Final
participant Client as Aplicación Cliente
participant AuthServer as Servidor de Autorización
participant ResourceServer as Servidor de Recursos
User->>Client: 1. Iniciar Login
Client->>AuthServer: 2. Solicitud de Autorización
AuthServer->>User: 3. Prompt de Login y Consentimiento
User->>AuthServer: 4. Aprobar Acceso
AuthServer->>Client: 5. Código de Autorización
Client->>AuthServer: 6. Intercambiar Código por Token
AuthServer->>Client: 7. Access Token + Refresh Token
Client->>ResourceServer: 8. Solicitud API con Access Token
ResourceServer->>Client: 9. Recurso Protegido
Step-by-Step Flow
- Usuario inicia login - Hace clic en “Login with Google/GitHub/etc.”
- Solicitud de autorización - El cliente redirige al servidor de autorización
- Autenticación de usuario - El usuario inicia sesión y ve la solicitud de permisos
- Consentimiento de usuario - El usuario aprueba los scopes solicitados
- Código de autorización - El servidor redirige de vuelta con un código temporal
- Intercambio de token - El cliente intercambia el código por un access token (backend)
- Acceso concedido - El cliente recibe access token y refresh token
- Acceso a API - El cliente usa el access token para llamar APIs protegidas
- Datos retornados - El servidor de recursos valida el token y retorna los datos
Common Use Cases
Third-Party Integrations
Permitir a los usuarios conectar tu aplicación a sus cuentas existentes:
GET /oauth/authorize?
response_type=code&
client_id=YOUR_CLIENT_ID&
redirect_uri=https://yourapp.com/callback&
scope=read:user,write:repo&
state=random_state_string
Single Sign-On (SSO)
Permitir a los usuarios iniciar sesión una vez y acceder a múltiples aplicaciones:
- Aplicaciones empresariales
- Suites multi-producto
- Integraciones con partners
Mobile & SPA Applications
Usar PKCE (Proof Key for Code Exchange) para autenticación segura sin client secrets.
Best Practices
- Siempre usar HTTPS - Nunca transmitir tokens sobre conexiones no cifradas
- Validar redirect URIs - Prevenir interceptación de códigos de autorización
- Usar PKCE - Requerido para aplicaciones móviles/SPA, recomendado para todas
- Access tokens de vida corta - Típicamente 15-60 minutos
- Almacenamiento seguro de tokens - Nunca almacenar tokens en localStorage
- Implementar token refresh - Usar refresh tokens para obtener nuevos access tokens
- Validar parámetro state - Prevenir ataques CSRF
Common Pitfalls
| Problema | Impacto | Solución |
|---|---|---|
| Almacenar tokens en localStorage | Vulnerabilidad XSS | Usar httpOnly cookies o almacenamiento seguro |
| No validar state | Ataques CSRF | Siempre validar que el parámetro state coincida |
| Scopes excesivamente amplios | Permisos excesivos | Solicitar los scopes mínimos requeridos |
| Falta de PKCE | Interceptación de código de autorización | Implementar PKCE para todos los flujos |
| Access tokens de larga duración | Ventana de ataque aumentada | Usar expiración corta + refresh tokens |
Related Concepts
- JWT - Formato de token frecuentemente usado con OAuth
- PKCE - Extensión para clientes públicos
- OpenID Connect - Capa de identidad construida sobre OAuth 2.0
- Refresh Tokens - Tokens de larga duración para obtener nuevos access tokens