Autenticación y contraseñas

OAuth 2.0

Lectura de aproximadamente 5 minutos

Qué es OAuth 2.0

OAuth 2.0 es un marco de autorización que otorga a aplicaciones de terceros acceso limitado a los recursos del usuario sin compartir su contraseña. Está estandarizado en RFC 6749.

Un ejemplo cotidiano son los inicios de sesión sociales como "Iniciar sesión con Google" o "Iniciar sesión con GitHub". En este caso, se puede autorizar el acceso a la información de perfil que Google posee (nombre, dirección de correo electrónico, etc.) sin revelar la contraseña de Google al servicio que se desea utilizar.

Un punto importante es que OAuth 2.0 es un marco de "autorización (Authorization)" y no un protocolo de "autenticación (Authentication)". Cuando se necesita funcionalidad de autenticación, se utiliza OpenID Connect (OIDC), construido sobre OAuth 2.0. La mayoría de los inicios de sesión únicos se basan en OIDC.

Actores y flujo de OAuth 2.0

En OAuth 2.0 participan 4 roles.

  • Propietario del recurso: El propietario de los datos (normalmente el propio usuario)
  • Cliente: La aplicación que desea acceder a los datos del usuario
  • Servidor de autorización: El servidor que emite tokens de acceso (ejemplo: el endpoint de autorización de Google)
  • Servidor de recursos: El servidor que posee los datos del usuario (ejemplo: el servidor API de Google)

El flujo más común, Authorization Code Flow, funciona de la siguiente manera.

  1. El usuario hace clic en el botón "Iniciar sesión con Google" de la aplicación cliente
  2. El cliente redirige al usuario al endpoint de autorización de Google
  3. El usuario se autentica en la pantalla de inicio de sesión de Google y consiente el acceso
  4. Google devuelve un código de autorización (código temporal) al cliente
  5. El cliente intercambia el código de autorización por un token de acceso
  6. El cliente utiliza el token de acceso para obtener información del usuario desde la API de Google

Con este mecanismo, la aplicación cliente puede acceder a los datos dentro del alcance autorizado sin conocer en absoluto la contraseña de Google del usuario.

Control de acceso mediante scopes

Un concepto importante de OAuth 2.0 es el "scope". El scope define el alcance de los permisos otorgados al token de acceso.

Por ejemplo, en OAuth 2.0 de Google se definen los siguientes scopes.

  • profile: Lectura del nombre y la imagen de perfil
  • email: Lectura de la dirección de correo electrónico
  • https://www.googleapis.com/auth/drive.readonly: Acceso de solo lectura a Google Drive
  • https://www.googleapis.com/auth/calendar: Lectura y escritura en Google Calendar

Lo que el usuario confirma en la pantalla de consentimiento es esta lista de scopes. Si los scopes que solicita la aplicación son demasiado amplios (ejemplo: una aplicación de calendario que solicita acceso a los contactos), puede haber recopilación innecesaria de datos, por lo que se debe tener precaución. Basándose en el principio de minimización de datos, verifique que la aplicación solicite solo los scopes mínimos necesarios.

Consideraciones de seguridad de OAuth 2.0

Para utilizar OAuth 2.0 de forma segura, hay puntos que debe conocer como usuario.

  • Verificar siempre la pantalla de consentimiento: Confirme los permisos (scopes) que solicita la aplicación y no consienta aplicaciones que soliciten permisos innecesariamente amplios
  • Revisar periódicamente las aplicaciones vinculadas: En la configuración de cuentas de Google, GitHub, etc., revise las aplicaciones de terceros vinculadas y revoque el acceso de las aplicaciones que ya no utilice
  • Importancia de PKCE (Proof Key for Code Exchange): En aplicaciones móviles y SPA (Single Page Application), la extensión PKCE es esencial para prevenir ataques de interceptación del código de autorización. En OAuth 2.1, PKCE será obligatorio para todos los clientes
  • Protección contra CSRF: Utilizar el parámetro state para verificar la correspondencia entre la solicitud de autorización y el callback. Esto previene ataques donde el atacante hace que el usuario utilice un código de autorización preparado por el atacante
  • Validación estricta del URI de redirección: El servidor de autorización debe permitir solo URIs de redirección registrados para prevenir vulnerabilidades de redirección abierta

Conceptos erróneos comunes

OAuth 2.0 es un protocolo para inicio de sesión (autenticación)
OAuth 2.0 es un marco de autorización (permiso de acceso a recursos) y no un protocolo de autenticación (verificación de identidad del usuario). Para la autenticación se utiliza OpenID Connect (OIDC), construido sobre OAuth 2.0. "Iniciar sesión con Google" es, precisamente, autenticación mediante OIDC.
Si uso inicio de sesión social, se elimina el riesgo de filtración de contraseñas
El inicio de sesión social elimina la necesidad de contraseñas individuales para cada servicio, pero si la cuenta de Google o GitHub es comprometida, todos los servicios vinculados se ven afectados. Es importante configurar obligatoriamente la autenticación de dos factores en la cuenta SSO y revisar periódicamente las aplicaciones vinculadas.

Términos relacionados

Artículos relacionados