OAuth2 es la solución estándar de la industria para implementar autorización en aplicaciones modernas. Este protocolo permite gestionar de forma segura quién puede acceder a qué recursos, sin necesidad de compartir credenciales sensibles entre diferentes sistemas.

En este tutorial práctico, crearemos "auth-api", un servicio de autorización que implementará OAuth2 para proteger nuestra API de contactos existente. Este servicio se ejecutará en la misma instancia EC2 que nuestra API original, funcionando como un guardián que valida las solicitudes antes de permitir el acceso a los recursos.

Trabajaremos con dos implementaciones específicas:

  1. Social Login para administradores: Permitiremos que los administradores accedan a un panel de control utilizando sus cuentas de Google.
  2. Client Credentials para APIs: Los administradores podrán generar credenciales de cliente (Client IDs y Secrets) desde el panel administrativo, que las aplicaciones externas utilizarán para autenticarse y acceder a las APIs protegidas. Implementaremos un sistema de scopes que permitirá controlar con precisión los permisos de cada cliente, como por ejemplo: solo lectura de contactos, o capacidad para crear, modificar y eliminar contactos.

Al finalizar este tutorial, tendrás un sistema completo de autorización para tu API que incluye validación de tokens, todo ejecutándose en contenedores Docker en AWS EC2.

Asumiendo que ya tienes funcionando la API de contactos del tutorial anterior, comencemos a entender e implementar OAuth2.

Fundamentos de OAuth2

¿Qué es OAuth2?

OAuth2 es un protocolo de autorización que permite a aplicaciones de terceros obtener acceso limitado a un servicio HTTP en nombre de un propietario de recursos o en nombre de la propia aplicación. Este protocolo reemplaza al original OAuth y se ha convertido en el estándar de la industria para la implementación de autorización en aplicaciones modernas.

La principal ventaja de OAuth2 es que permite el acceso a recursos protegidos sin compartir las credenciales originales (como nombre de usuario y contraseña). En su lugar, utiliza tokens que otorgan acceso temporal y limitado a los recursos.

Roles en OAuth2

En el protocolo OAuth2 existen cuatro roles principales:

  1. Propietario del recurso: Es el usuario final que autoriza a una aplicación a acceder a su cuenta. El acceso se limita a ciertos "scopes" o alcances.
  2. Servidor de recursos: Es el servidor que aloja los recursos protegidos. En nuestro caso, es nuestra API de contactos.
  3. Cliente: Es la aplicación que solicita acceso a los recursos protegidos. Puede ser una aplicación web, móvil o de servidor.
  4. Servidor de autorización: Es el servidor que emite tokens de acceso al cliente después de autenticar al propietario del recurso y obtener su autorización. En nuestro caso, será nuestro nuevo servicio "auth-api".

Flujos de OAuth2

OAuth2 define varios flujos de autorización adaptados a diferentes casos de uso: