OAuth 2.0

Authentication
authentication authorization security tokens

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

  1. Usuario inicia login - Hace clic en “Login with Google/GitHub/etc.”
  2. Solicitud de autorización - El cliente redirige al servidor de autorización
  3. Autenticación de usuario - El usuario inicia sesión y ve la solicitud de permisos
  4. Consentimiento de usuario - El usuario aprueba los scopes solicitados
  5. Código de autorización - El servidor redirige de vuelta con un código temporal
  6. Intercambio de token - El cliente intercambia el código por un access token (backend)
  7. Acceso concedido - El cliente recibe access token y refresh token
  8. Acceso a API - El cliente usa el access token para llamar APIs protegidas
  9. 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

  1. Siempre usar HTTPS - Nunca transmitir tokens sobre conexiones no cifradas
  2. Validar redirect URIs - Prevenir interceptación de códigos de autorización
  3. Usar PKCE - Requerido para aplicaciones móviles/SPA, recomendado para todas
  4. Access tokens de vida corta - Típicamente 15-60 minutos
  5. Almacenamiento seguro de tokens - Nunca almacenar tokens en localStorage
  6. Implementar token refresh - Usar refresh tokens para obtener nuevos access tokens
  7. Validar parámetro state - Prevenir ataques CSRF

Common Pitfalls

ProblemaImpactoSolución
Almacenar tokens en localStorageVulnerabilidad XSSUsar httpOnly cookies o almacenamiento seguro
No validar stateAtaques CSRFSiempre validar que el parámetro state coincida
Scopes excesivamente ampliosPermisos excesivosSolicitar los scopes mínimos requeridos
Falta de PKCEInterceptación de código de autorizaciónImplementar PKCE para todos los flujos
Access tokens de larga duraciónVentana de ataque aumentadaUsar expiración corta + refresh tokens
  • 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

References