Hoy nos sumergimos en los fundamentos de OAuth2 — el estándar de autorización que permite gestionar de forma segura el acceso a recursos. Es un paso importante para crear aplicaciones escalables y seguras, especialmente si trabajas con sistemas distribuidos o quieres integrar autenticación mediante proveedores externos, como Google o Facebook.
¿Qué es OAuth2?
Empecemos por lo básico. OAuth2 es un estándar de autorización que permite a las aplicaciones obtener de forma segura acceso a recursos (por ejemplo, datos de usuario) proporcionados por otros servicios. Pero antes de entrar en detalles, hablemos un poco del antecesor — OAuth1.
- OAuth1 fue un estándar potente pero complejo: usaba firmas basadas en la criptografía HMAC y requería más esfuerzo para implementarlo.
- OAuth2 está simplificado, pero no por ello menos fiable. Se apoya en HTTPS para garantizar la seguridad y usa el concepto flexible de tokens.
Ejemplo
Imagina que quieres que tu aplicación pueda publicar notas en Twitter en nombre de un usuario. En lugar de pedir la contraseña del usuario (y arriesgar su seguridad), puedes usar OAuth2. El usuario se autentica vía Twitter, y tu aplicación recibe una clave temporal (token), que le permite realizar acciones en nombre del usuario. ¡Cómodo y seguro!
Principales actores de la arquitectura de OAuth2
En cualquier arquitectura OAuth2 participan los siguientes actores:
- Servidor de recursos (Resource Server) — el servidor donde se almacenan tus datos. Por ejemplo, puede ser Twitter o GitHub.
- Cliente (Client) — tu aplicación que quiere acceder a los datos en el servidor de recursos.
- Usuario (Resource Owner) — el propietario de los datos (por ejemplo, el usuario que se autentica).
- Servidor de autorización (Authorization Server) — el servidor encargado de emitir tokens tras una autorización exitosa.
Veámoslo con un ejemplo:
- El usuario entra en tu aplicación (cliente).
- La aplicación redirige al usuario al servidor de autorización (por ejemplo, Google).
- El usuario introduce sus datos (login, contraseña) y da su consentimiento para el acceso.
- Google devuelve un token a tu aplicación, para que pueda trabajar con sus recursos (por ejemplo, los contactos).
Piénsalo como si le dieras a un amigo la llave del garaje en vez de la llave de todo el piso.
Flujos de OAuth2: qué son y cómo funcionan
Dependiendo del caso de uso, OAuth2 soporta varios "flujos" o modos de funcionamiento. La elección del flujo depende de quién solicita acceso y cómo se realiza.
| Flujo | Descripción breve |
|---|---|
| Authorization Code | Ideal para aplicaciones web. El cliente obtiene el token a través del servidor de autorización |
| Implicit Flow | Método obsoleto y menos seguro. Se usa para SPA, donde el token se entrega directamente al cliente |
| Resource Owner Password | El cliente solicita las credenciales directamente al usuario (no recomendado) |
| Client Credentials | Se usa para aplicaciones servidoras que no necesitan los datos de un usuario concreto |
Authorization Code Flow: ejemplo
Vamos a profundizar en Authorization Code Flow, ya que es el flujo más popular. Incluye los siguientes pasos:
- El cliente redirige al usuario al servidor de autorización.
- El usuario inicia sesión y confirma el permiso.
- El servidor de autorización devuelve un código de autorización temporal.
- El cliente envía ese código de vuelta al servidor de autorización y recibe un token de acceso.
Esquema de este proceso:
[Usuario] ---> [Cliente] ---> [Servidor de autorización]
^ |
|---------------------------------------------|
Token
¿Por qué es seguro? Porque el token se transmite a través del servidor de autorización, y no directamente al cliente.
¿Por qué OAuth2 es tan importante para los microservicios?
Los microservicios son otro capítulo en el desarrollo de aplicaciones. Aquí tenemos decenas (o incluso cientos) de pequeños servicios que deben interactuar de forma segura. OAuth2 resuelve muchos problemas:
- Autenticación centralizada. Por ejemplo, cada microservicio no tiene que comprobar logins y contraseñas por sí mismo.
- Gestión de acceso. Los microservicios pueden centrarse en su lógica de negocio y dejar la seguridad al servidor centralizado.
- Tokens. Cada interacción está respaldada por tokens, lo que evita accesos no autorizados.
Casos de uso de OAuth2 en aplicaciones reales
Ahora vamos a inspirarnos un poco con casos de uso de OAuth2.
- Google Drive API: Puedes acceder a los archivos de un usuario a través de su API usando OAuth2.
- GitHub API: Autenticándote con GitHub puedes gestionar los repositorios del usuario.
- Slack API: Tus aplicaciones pueden enviar mensajes a Slack en nombre del usuario.
Cada uno de estos APIs usa el estándar OAuth2, lo que los hace seguros y fáciles de integrar.
Preguntas frecuentes sobre OAuth2
¿En qué se diferencia OAuth2 de OAuth1?
OAuth2 es mucho más fácil de implementar gracias a la renuncia a firmas criptográficas complejas (HMAC). En lugar de eso, todo se basa en HTTPS, que ya proporciona cifrado.
¿Se puede usar OAuth2 en aplicaciones móviles?
Sí, OAuth2 sirve para todo tipo de aplicaciones, incluidas las móviles. Para móviles a menudo se usan los flujos Authorization Code o Implicit Flow.
Problemas de OAuth2 y cómo se resuelven
Aunque OAuth2 es una herramienta potente, tiene sus problemas. Por ejemplo, ¿qué pasa si el token de acceso caduca? O si lo roban? Aquí entran en juego mecanismos adicionales, como Refresh tokens (la estudiaremos en próximas lecciones).
También, en general, es importante recordar: ¡solo HTTPS! OAuth2 es efectivo solo en combinación con un protocolo de transporte seguro.
¡Prepárate para la práctica! En las siguientes lecciones empezaremos a implementar OAuth2 y JWT en nuestra aplicación. Es hora de aprender a proteger nuestros microservicios no solo de los usuarios, sino también de fuerzas maliciosas (ups, quiero decir de atacantes)!
GO TO FULL VERSION