Tanto JWT como OAuth pueden ayudarle a mejorar la seguridad de su aplicación web ofreciendo autenticación y autorización seguras. Pero, ¿cuál debería implementar para permitir a los usuarios acceder a su aplicación web de forma segura? Hemos preparado un artículo detallado sobre JWT vs. OAuth para responder a esta pregunta.
Después de leerlo, tendrá una idea clara sobre qué son JWT y OAuth, qué ventajas ofrecen, en qué se diferencian y cuál debería implementar para mejorar la seguridad de su aplicación web.
Sin más preámbulos, vamos a sumergirnos.
¿Qué es un JWT?
JWT, siglas de JSON Web Token, es un estándar abierto que define una forma de compartir información de forma segura entre dos partes como un objeto JSON. Como la información está firmada digitalmente, las partes pueden confiar y verificar la información transmitida a través de tokens web JSON.
El tamaño relativamente pequeño de los JWT permite enviarlos a través de un parámetro POST, una URL o dentro de una cabecera HTTP. Un token web JSON consta de tres partes: encabezado, carga útil y firma.
El encabezado indica de qué tipo de token se trata y el tipo de algoritmo de firma utilizado. La parte Carga útil de un JWT incluye afirmaciones que son declaraciones sobre los usuarios y datos adicionales.
Como su nombre indica, la parte Firma de un Token Web JSON contiene la firma para verificar que el mensaje no ha sido alterado por el camino.
Cómo funcionan los JWT
A continuación se explica cómo funciona un token web JSON.
Inicio de sesión del usuario
Los usuarios inician sesión en su aplicación web enviando sus nombres de usuario y contraseñas. A continuación, su aplicación transfiere estas credenciales de inicio de sesión al servidor de autenticación.
Generación del token
Una vez que el servidor de autenticación ha verificado las credenciales de inicio de sesión de los usuarios, genera tokens web JSON y los envía a los usuarios. Estos JWT pueden incluir información crítica sobre los usuarios y las sesiones de autenticación. Los usuarios almacenan estos JWT localmente. En función de la configuración, el servidor también puede firmar los JWT utilizando un secreto compartido o una clave privada para mejorar la seguridad.
Verificación de tokens
Cuando los usuarios realicen peticiones a su servidor de aplicaciones para acceder a cualquier recurso, incluirán sus JWT en sus peticiones al servidor. Su servidor de aplicaciones verificará las firmas en los JWT y comprobará las reclamaciones en las cargas útiles para verificar si los usuarios tienen permiso para acceder a los recursos solicitados.
Si los JWT son válidos, se concederá a los usuarios el acceso a los recursos solicitados en su aplicación web.
Casos de uso de los JWT
Se pueden utilizar los tokens web JSON de las siguientes maneras:
#1. Autorización
Después de que los usuarios inicien sesión con éxito en su aplicación web a través del punto final de inicio de sesión, el servidor de autenticación les emitirá JWTs. Los usuarios utilizarán sus JWT para acceder a los recursos dentro de la aplicación, que requieren autenticación para probar su identidad.
Lea también: Cómo autenticar y autorizar usuarios mediante JWT en NodeJS
Intercambio de información entre las partes
JSON Web Token puede ser la opción adecuada para transmitir información de forma segura a usuarios válidos. Los tokens web JSON están firmados para garantizar que la información procede de la fuente original. Además, la estructura de JWT (la parte de la firma) permite a los receptores verificar que la información no ha sido alterada por el camino.
Beneficios de los JWT
A continuación se enumeran los principales beneficios de implementar los JWT en su aplicación web.
- A diferencia de los tokens SAML, los JWT son ligeros. Por lo tanto, puede implementarlos rápidamente en entornos HTML y HTPP, lo que hace que los JWT sean ideales para aplicaciones cliente como las aplicaciones móviles.
- Los JWT ofrecen una seguridad robusta. Puede firmar los JWT simétricamente mediante un secreto compartido utilizando el algoritmo HMAC o una clave privada para firmarlos asimétricamente.
- Los JWT vienen con un mecanismo de caducidad incorporado, que le permite establecer el periodo de caducidad de los JWT para mejorar la seguridad.
- Los tokens web JSON son ampliamente adoptados por diferentes soluciones de inicio de sesión único. Como resultado, es fácil trabajar con JWT.
Además, los JWT pueden ahorrar espacio de almacenamiento en la base de datos de su empresa. Esto se debe a que su servidor sólo crea JWTs, y se guardan en el lado del cliente. Además, los JWT no requieren una búsqueda en la base de datos.
Por lo tanto, los JWT pueden verificarse rápidamente, ofreciendo una experiencia de usuario superior.
Limitaciones de los JWT
Aunque los JWT son una forma excelente de autorizar a los usuarios. Tienen ciertas limitaciones, como por ejemplo
- Usted es responsable de garantizar la seguridad de la clave de cifrado. Si un pirata informático se hace con la clave que firma sus JWT, tendrá un gran problema. Podrían fabricar tokens falsos que manipularan los datos de sus usuarios. Eso supone un enorme riesgo para la seguridad.
- Los JWT no necesitan una llamada a la base de datos para cada verificación, lo que suena bien. Pero si necesita revocar uno cuanto antes, tendrá que ponerlo en una lista negra. Esa no es una tarea rápida ni sencilla.
- Cuando caduca un JWT, no se trata sólo de prolongar el temporizador. Su sistema pedirá al usuario que se conecte de nuevo para obtener un token nuevo. Esto añade complejidad a todo el proceso, lo que exige pensar más en la experiencia del usuario y en los flujos de seguridad. Para facilitar el proceso, puede implementar tokens de actualización en combinación con JWT. Cuando el token de acceso caduca, los clientes pueden utilizar estos tokens de actualización para solicitar nuevos tokens de acceso sin que el cliente tenga que volver a enviar sus credenciales de inicio de sesión.
- Implementar JWTs en su aplicación web no es una tarea sencilla; requiere un trabajo de ingeniería adicional. Tendrá que configurar el proceso de creación de tokens, elegir el mecanismo de firma adecuado para su aplicación e integrarlo todo en su arquitectura actual.
Los JWT no son una solución de un solo paso, sino más bien un proyecto que requiere una cuidadosa planificación y ejecución.
¿Qué es OAuth?
OAuth, abreviatura de open authorization (autorización abierta), es un protocolo de autorización estándar abierto para la autorización. Permite que las aplicaciones web o los sitios web accedan a recursos alojados por aplicaciones de terceros en nombre de los usuarios sin que éstos compartan las credenciales de inicio de sesión de las aplicaciones de terceros.
Ahora, escrito como OAuth 2.0 (la última versión de OAuth), se utiliza ampliamente para autenticar a los usuarios a través de un servidor de autenticación.
Por ejemplo, con OAuth en funcionamiento, los usuarios pueden iniciar sesión en su aplicación con sus cuentas de Facebook o Google. Pero sólo introducirán sus credenciales de inicio de sesión en las cuentas de Facebook o Google.
Cómo funciona OAuth
Por ejemplo, usted tiene una aplicación de gestión del tiempo. Y para que cualquiera pueda utilizar su app de forma eficiente, necesita acceder a sus bandejas de entrada de correo electrónico. Antes, los usuarios tenían que compartir sus credenciales de inicio de sesión con su aplicación para que ésta pudiera acceder a sus bandejas de entrada. OAuth2.0 ha resuelto este problema.
He aquí cómo es el flujo de trabajo OAuth2.0:
- Su app de gestión del tiempo (el cliente) solicita acceder a recursos protegidos; en este caso, se trata de la bandeja de entrada del usuario, propiedad del usuario (propietario del recurso). Su aplicación lo hace enviando al usuario al punto final autorizado.
- El propietario del recurso (usuario) autentica y autoriza la solicitud de acceso al recurso desde la app de gestión del tiempo. El cliente (su app) obtendrá una concesión de autorización del endpoint autorizado.
- Su aplicación solicitará un token de acceso al servidor de autorización para acceder a la bandeja de entrada del usuario. Lo hará enviando la concesión de autorización y con su propia autenticación de identidad.
- Si la identidad de su aplicación está autenticada y la concesión de autorización es válida, su aplicación recibirá un token de acceso para acceder a la bandeja de entrada del usuario.
- Si el token de acceso es válido, su app puede ahora acceder a los datos del usuario (la bandeja de entrada del usuario) enviando el token de acceso para su autenticación.
Ahora, su aplicación de gestión del tiempo puede acceder a la bandeja de entrada del usuario. Como Oauth tiene varios tipos de concesión, el flujo de autorización puede diferir ligeramente en función de los tipos de concesión de autorización.
Beneficios de OAuth
Las siguientes son las principales ventajas de utilizar OAuth.
- OAuth es un estándar ampliamente aceptado. Esto significa que todos los principales servicios de autenticación entienden y utilizan OAuth.
- Los usuarios encontrarán muchos complementos y funciones de OAuth entre los que elegir, gracias a su amplio uso y compatibilidad.
- OAuth ofrece bibliotecas cliente probadas para casi todos los lenguajes de programación y marcos web. Por lo tanto, puede utilizar su lenguaje preferido con OAuth.
- OAuth es altamente seguro y está bien probado. Dado que su uso está tan extendido, los expertos ya han tenido en cuenta todos los posibles riesgos de seguridad.
- OAuth es genial para el desacoplamiento de código. El código principal de su aplicación no se desordena al gestionar las tareas de autenticación. Esto facilita la gestión y actualización de su aplicación a largo plazo.
Casos de uso de OAuth
Los siguientes son algunos casos de uso populares de OAuth:
- El uso más común de OAuth 2.0 es hacer que las aplicaciones de terceros puedan acceder a las cuentas de los usuarios. Con OAuth 2.0, los usuarios pueden autorizar a terceros a acceder a sus datos almacenados en diferentes servicios sin necesidad de proporcionar a terceros las credenciales de inicio de sesión de dichos servicios.
- Como propietario de una aplicación web, puede emplear OAuth 2.0 para implementar el inicio de sesión único. Puede explorar estas soluciones OAuth de código abierto para su proyecto.
- Puede implementar OAuth 2.0 en su pasarela API para que ésta actúe como servidor de autorización. Esto garantizará que la pasarela API reenvíe las solicitudes de los clientes con tokens de acceso válidos.
- OAuth 2.0 puede facultar a dispositivos IoT e inteligentes como frigoríficos o televisores para interactuar con API de terceros en nombre de los usuarios. Esto resulta muy útil cuando un usuario quiere iniciar sesión en una aplicación en aparatos sin un teclado normal, como un televisor inteligente o una consola de videojuegos.
Limitaciones de OAuth
La gama de flujos disponibles puede resultar desalentadora para los recién llegados a OAuth. No se trata sólo de elegir uno; a veces, se necesita una combinación para satisfacer todos los requisitos de seguridad. Esta complejidad puede hacer que a los principiantes les resulte difícil saber por dónde empezar, qué utilizar y cómo integrarlo de forma eficaz.
Cada flujo sirve a un propósito único, ya sea para aplicaciones móviles, comunicación de servidor a servidor o aplicaciones web. Por lo tanto, analizar cuidadosamente sus necesidades específicas es esencial antes de hacer una elección.
OAuth 2.0 depende de SSL/TLS para mantener la seguridad. Si SSL/TLS no está bien configurado, la seguridad de OAuth 2.0 podría estar en peligro.
Además, OAuth puede plantear problemas de privacidad, sobre todo cuando se realiza un seguimiento de la actividad del usuario. Cuando utiliza un servicio como «Iniciar sesión con Google», Google puede tener conocimiento de su actividad en ese sitio de terceros. No sólo puede que Google sepa que ha iniciado sesión, sino que también puede rastrear con qué frecuencia y cuándo interactúa con ese sitio.
Además, OAuth podría ser excesivo para configuraciones más sencillas, como una aplicación con sólo un front-end y un back-end. Puede que no necesite sus complejidades en tales casos.
Diferencia entre JWT y OAuth
Los JWT y OAuth cumplen la función crucial de verificar la identidad del usuario para autorizar el acceso a los recursos. Son herramientas esenciales en el panorama de la seguridad, pero difieren en su alcance, complejidad y aplicación.
Características | JWTs | OAuth |
---|---|---|
Uso principal | Los JWT se centran principalmente en las API. | OAuth cubre web, navegador, API y otras aplicaciones. |
Token vs. Protocolo | Los JWT son un formato de token. | OAuth es un protocolo de autorización. |
Almacenamiento | Los JWT se basan únicamente en el almacenamiento del lado del cliente. | OAuth utiliza tanto almacenamiento del lado del cliente como del lado del servidor. |
Flexibilidad | Los JWT tienen un alcance más limitado. | OAuth ofrece más flexibilidad y una gama más amplia de casos de uso. |
Facilidad de uso | Los JWT son más sencillos y fáciles de comprender. | OAuth es más complejo. |
Mientras que los JWT son más sencillos y están orientados a la seguridad de las API, OAuth ofrece una solución completa de mecanismo de autenticación que puede adaptarse a diversos escenarios.
Y OAuth puede permitir a los usuarios que una aplicación de terceros acceda a sus datos en otra plataforma sin revelar sus datos de acceso.
Que uno sea mejor o no depende de las necesidades específicas del sistema o la red en cuestión.
¿Puede utilizar JWT y OAuth juntos?
Aunque JWT y OAuth sirven para propósitos diferentes, puede combinarlos juntos.
El protocolo OAuth no especifica ningún formato de token que deba utilizarse estrictamente. Así que puede implementar JWTs en OAuth.
Por ejemplo, el servidor de autenticación OAuth2 puede emitir un token de acceso con JWTs. Y este JWT podría incluir información adicional en la carga útil, mejorando el rendimiento. Esto se debe a que se reducirán los viajes de ida y vuelta entre los servidores de autenticación y de recursos.
La combinación de JWTs y OAuth2 también puede darse a través de un enfoque dual-token-OAuth2 emite dos tokens separados en este método: un access_token y un JWT. El JWT contiene información adicional sobre la identidad. Este enfoque proporciona una capa extra de detalle, dándole más control sobre el acceso y los datos del usuario.
Es crucial utilizar OpenID Connect cuando se opta por esta estrategia de doble token. OpenID Connect se basa en OAuth2 y añade más campos estandarizados a los tokens.
Utilizar JWTs en lugar de OAuth2 puede hacer las cosas más rápidas y menos complejas para tareas específicas. Pero también puede hacer que el desarrollo sea más complicado.
Cuando decida utilizar JWT con OAuth2, considere si el aumento de velocidad justifica el trabajo añadido en el desarrollo.
Conclusión
En la batalla de JWT frente a OAuth por la seguridad web definitiva, cada uno tiene méritos y desventajas. JWT brilla para la autenticación rápida y sin estado, pero tiene limitaciones como la falta de revocación incorporada. OAuth destaca en escenarios de autorización complejos, pero puede resultar excesivo para proyectos más sencillos.
Si necesita una autorización sólida y una autenticación eficaz, considere la posibilidad de combinar JWT y OAuth a través de OpenID Connect.
Su elección debe depender de las necesidades específicas de su proyecto, no sólo del bombo publicitario en torno a estas tecnologías.
Además, puede explorar estas populares plataformas de autenticación de usuarios para elegir la mejor solución para su aplicación.