OpenID vs OAuth
July 3, 2024
Para garantizar la seguridad de la información del usuario y permitir que aplicaciones de terceros accedan a recursos restringidos, han surgido dos tecnologías principales: OpenID Connect y OAuth. Aunque estas dos suelen discutirse juntas, difieren fundamentalmente en su posicionamiento funcional y objetivos principales.
Específicamente, OAuth se centra en construir un marco de autorización, cuyo propósito principal es otorgar a aplicaciones de terceros el permiso para acceder a recursos específicos, sin involucrar directamente la verificación de la identidad del usuario. En contraste, OpenID Connect se posiciona precisamente como un servicio de autenticación de identidad, llenando el vacío que OAuth tiene en el ámbito del reconocimiento de identidad y asegurando la autenticidad y confiabilidad de las identidades de los usuarios.
En este blog, profundizaremos en la esencia, los mecanismos de operación, los escenarios de aplicación típicos y la relación sutil pero íntima entre OpenID Connect y OAuth.
¿Qué es OpenID Connect?
OpenID Connect (OIDC) es un protocolo de autenticación basado en el marco de OAuth 2.0, que extiende la funcionalidad de OAuth al introducir el concepto de un token de ID. OIDC no solo permite a los usuarios autorizar a aplicaciones de terceros para acceder a sus recursos, sino que también proporciona verificación de la información de identidad del usuario, permitiendo el acceso seguro a múltiples servicios utilizando una única credencial de inicio de sesión.
En comparación con OAuth 2.0, la diferencia central de OIDC es la adición de la capa de autenticación, mientras que OAuth 2.0 se centra principalmente en la autorización, permitiendo a los usuarios controlar los permisos de acceso de aplicaciones de terceros a sus recursos, sin involucrar la verificación específica de la identidad del usuario.
El proceso de autenticación de OpenID Connect:
-
Acceso a la aplicación: Cuando un usuario desea utilizar una aplicación o servicio, si la aplicación necesita verificar la identidad del usuario, este será dirigido al proveedor de servicios de autenticación de identidad, OpenID Connect provider (OP) para iniciar sesión.
-
Inicio de sesión del usuario: El usuario ingresa su nombre de usuario y contraseña (o se somete a otros mecanismos de autenticación soportados por el OP) en la interfaz de inicio de sesión del OP. Una vez que el usuario inicia sesión correctamente, el proveedor de OpenID Connect confirmará la identidad del usuario.
-
Emisión del token de ID: Después de confirmar la identidad del usuario, el proveedor de OpenID Connect generará un token especial llamado token de ID. Este token contiene la información de identidad del usuario, como el nombre de usuario, dirección de correo electrónico y otros datos clave, asegurando la representación digital y transmisión de la identidad del usuario.
-
Uso del token de ID: Después de obtener el token de ID, el usuario puede presentarlo a la aplicación a la que previamente deseaba acceder. La aplicación activará entonces el mecanismo de verificación para comprobar el token y confirmar que fue emitido por un proveedor de OpenID Connect confiable y que no ha expirado.
-
Acceso a la aplicación: Una vez que la aplicación ha verificado la validez del token de ID, permitirá al usuario acceder a los recursos o servicios protegidos. De esta manera, el usuario no necesita registrarse e iniciar sesión en cada aplicación por separado, sino que puede utilizar el token de ID emitido por el proveedor de OpenID Connect.
-
Garantía de seguridad: OpenID Connect utiliza tecnología avanzada de JSON Web Token (JWT) para generar y verificar los tokens, mitigando efectivamente los riesgos de manipulación y robo de datos. Además, OpenID Connect también soporta de manera flexible múltiples modos de autenticación y autorización, como el modo de código de autorización, modo implícito y modo híbrido, para adaptarse a los requisitos de seguridad de diferentes escenarios.
¿Qué es OAuth?
En resumen, OAuth es un protocolo que permite a aplicaciones de terceros acceder a recursos sensibles almacenados por el usuario (como bibliotecas de fotos, listas de contactos, etc.) en otro servicio, sin acceder directamente a las credenciales de inicio de sesión del usuario (nombre de usuario y contraseña). Este mecanismo está más inclinado hacia la "autorización" que hacia la "autenticación".
Por ejemplo, si deseas utilizar tu cuenta de Google para iniciar sesión en una aplicación de noticias, la aplicación puede usar OAuth para solicitar tu información pública (como el avatar y el apodo) de tu cuenta de Google, sin necesidad de que proporciones directamente el nombre de usuario y contraseña de la cuenta de Google a la aplicación de noticias.
El proceso de autorización de OAuth:
-
Solicitud de autorización del usuario: Supongamos que estás utilizando una aplicación social que desea acceder a información de tu cuenta en otra red social. Sin embargo, esta información está protegida, por lo que se requiere autorización.
-
Redirección al servidor de autorización: La aplicación de terceros redirigirá tu solicitud a una página en un servidor de autorización, que generalmente te pedirá que inicies sesión en el servicio que deseas autorizar.
-
Inicio de sesión y autorización del usuario: En la página del servidor de autorización, necesitas iniciar sesión con tu cuenta. Después de iniciar sesión, la página te preguntará si estás de acuerdo en permitir que la aplicación de terceros acceda a tu información.
-
Emisión del token de acceso por el servidor de autorización: Si estás de acuerdo, el servidor de autorización generará un "pase" especial llamado token de acceso. Este token es como un pase de entrada temporal que permite a la aplicación de terceros acceder a tu información durante un período de tiempo.
-
Uso del token de acceso por la aplicación de terceros: Una vez que la aplicación de terceros ha obtenido el token de acceso, puede usar este token para solicitar tu información durante un período de tiempo. Cada vez que hace una solicitud, necesita presentar este token para demostrar que ha sido autorizada por ti.
-
Verificación del token por el servidor de autorización y devolución del recurso: Cuando la aplicación de terceros presenta el token de acceso al servidor de autorización que almacena tu información, el servidor de autorización verificará si el token es válido. Si es válido, permitirá que la aplicación de terceros acceda a la información correspondiente según los permisos del token.
Al adoptar el enfoque de OAuth, no solo se mejora enormemente la seguridad de tu cuenta, ya que elimina la necesidad de revelar directamente tu nombre de usuario y contraseña a la aplicación de terceros, sino que también proporciona un mecanismo de autorización flexible que te permite decidir de manera independiente qué aplicaciones pueden acceder a qué información tuya, logrando así un control preciso sobre el flujo de tu información personal.
Diferencias y conexiones entre OpenID Connect y OAuth
Las diferencias y conexiones entre OpenID Connect y OAuth son particularmente vívidas en aplicaciones prácticas. Supongamos que existe un sitio web de mascotas en línea llamado "Paraíso de Mascotas", donde los clientes pueden comprar suministros para mascotas, y la tienda de mascotas también proporciona una aplicación de seguimiento de salud de mascotas donde los clientes pueden registrar los datos de salud de sus mascotas, como el peso, la dieta y el estado de vacunación.
Aplicación de OpenID Connect en este caso de uso:
-
Autenticación: Cuando los clientes visitan por primera vez el sitio web "Paraíso de Mascotas" o descargan y usan la aplicación de seguimiento de salud de mascotas, necesitan registrarse e iniciar sesión. Para proporcionar una experiencia de inicio de sesión conveniente, la tienda de mascotas decide usar OpenID Connect para implementar el inicio de sesión único (SSO).
-
Token de ID: Los clientes pueden usar sus credenciales de otros servicios que soportan OpenID Connect (como cuentas de redes sociales) para iniciar sesión. Una vez que el inicio de sesión es exitoso, el proveedor de OpenID Connect emitirá un token de ID al cliente. Este token contiene la información de identidad del cliente y está cifrado y firmado.
-
Autenticación cruzada de servicios: Si el cliente visita posteriormente otros servicios de la tienda de mascotas (por ejemplo, desde el sitio web a la aplicación), puede usar directamente el token de ID obtenido previamente para la autenticación, sin tener que volver a ingresar el nombre de usuario y la contraseña. Esto permite al cliente cambiar sin problemas entre diferentes servicios.
Aplicación de OAuth en este caso de uso:
-
Autorización de aplicación de terceros: Supongamos que "Paraíso de Mascotas" quiere colaborar con una aplicación de terceros llamada "Diario de Mascotas" y permitir que los clientes sincronicen sus registros de compra de suministros para mascotas y datos de salud de mascotas de "Paraíso de Mascotas" a "Diario de Mascotas".
-
Token de acceso: Para lograr esta funcionalidad, "Paraíso de Mascotas" usará OAuth para autorizar a la aplicación "Diario de Mascotas" a acceder a los datos del cliente. Después de que el cliente acepte la autorización en el sitio web de "Paraíso de Mascotas", se generará un token de acceso a través del flujo de OAuth, que permite a la aplicación "Diario de Mascotas" acceder a los datos específicos del cliente en "Paraíso de Mascotas".
-
Protección de los datos del usuario: A través de OAuth, las credenciales de inicio de sesión del cliente (nombre de usuario y contraseña) no se expondrán directamente a la aplicación "Diario de Mascotas", sino que se compartirán de manera segura a través del token de acceso. De esta manera, incluso si la aplicación "Diario de Mascotas" es atacada, el atacante no podrá obtener directamente las credenciales de inicio de sesión del cliente.
Resumen
En resumen, las diferencias y asociaciones entre OAuth y OpenID Connect se pueden resumir de la siguiente manera.
-
Base y extensión:
- OAuth es un marco de autorización que permite a aplicaciones de terceros obtener permisos de acceso limitados sin usar el nombre de usuario y contraseña del usuario.
- OpenID Connect, por otro lado, se basa en el marco de OAuth 2.0 y extiende su funcionalidad al agregar una capa de autenticación.
-
Tokens y autenticación:
- En OAuth, el enfoque principal está en la autorización, es decir, permitir que las aplicaciones accedan a los recursos del usuario, mientras que OpenID Connect se centra más en la autenticación, es decir, confirmar la identidad del usuario.
- OpenID Connect introduce el concepto de un token de ID, que es un JSON Web Token (JWT) que contiene la información de identidad del usuario. Este token no solo prueba la identidad del usuario, sino que también puede incluir información del perfil personal del usuario.
-
Colaboración:
- Cuando una aplicación necesita verificar la identidad del usuario y acceder a los recursos del usuario, OpenID Connect y OAuth pueden trabajar juntos.
- El usuario primero autentica su identidad a través de OpenID Connect, obteniendo un token de ID, y luego la aplicación puede usar este token y el flujo de OAuth para obtener permiso para acceder a los recursos del usuario.
En resumen, OpenID Connect y OAuth son dos protocolos complementarios de autenticación y autorización de identidad que juntos proporcionan una solución segura, flexible y fácil de usar para la autenticación y autorización en aplicaciones web y móviles modernas.