El framework de autorización abierto OAuth permite a los sitios web y servicios compartir recursos entre los usuarios. Conoce más sobre lo que es OAuth.

A pesar de que todavía no se ha implementado completamente en toda la Internet, se puede acceder a una gran cantidad de sitios web totalmente independientes utilizando una autentificación única (Single Sign-On – SSO). Puede utilizar su contraseña, el teléfono, el certificado digital, la identidad biométrica, la autenticación de dos factores (2FA) o la autenticación de múltiples factores (MFA) para iniciar sesión en un sitio y no tener que colocar otra credencial de acceso para acceder a muchos otros sitios. Tenemos que agradecerle mucho a OAuth.

1. ¿Qué es OAuth?

OAuth es un framework o protocolo de autorización estándar abierto que describe cómo los servidores y servicios no relacionados pueden permitir acceso autenticado a sus activos de forma segura sin compartir realmente la credencial de inicio de sesión.

Creado y fuertemente apoyado desde el principio por Twitter, Google y otras compañías, OAuth fue lanzado (Oauth 1.0) como un estándar abierto en 2010 como RFC 5849, y rápidamente se hizo ampliamente adoptado. Durante los dos años siguientes, se sometió a revisión sustancial, y la versión 2.0 de OAuth, fue lanzado en 2012 como RFC 6749. A pesar de que la versión 2.0 fue ampliamente criticada por múltiples razones cubiertas a continuación, ganó aún más popularidad. Hoy en día, lo adoptan muchos servicios como, por ejemplo: Amazon, Facebook, Instagram, LinkedIn, Microsoft, Netflix, Paypal, entre otros.

Qué es OAuth

Ejemplo de qué es OAuth

El ejemplo más simple de OAuth es cuando vas a iniciar sesión en un sitio web (llamemos A) y se le ofrece una o más opciones para iniciar sesión con el inicio de sesión de otro sitio web/servicio (llamemos B). A continuación, hace clic en el botón vinculado al otro sitio web (B), y este otro sitio web le autentica. Finalmente, puede conectarse al sitio web original (A) después de utilizar el permiso obtenido en el segundo sitio web (B).

Para que OAuth funcione, todas las partes involucradas deben admitir la versión correcta de OAuth (1.0 o 2.0).

2. Cómo funciona OAuth

Al tratar de entender OAuth, puede ser útil recordar que en los escenarios de OAuth casi siempre representan dos sitios o servicios no relacionados que intentan realizar algo en nombre de los usuarios o de su software. Los tres tienen que trabajar juntos con múltiples aprobaciones para que la transacción sea autorizada.

Cómo Funciona OAuth

Cómo Funciona OAuth – Vía OAuthBible

También es importante recordar que OAuth trata sobre la autorización en particular y no directamente sobre la autenticación. La autenticación es el proceso en el cuál un usuario demuestra ser propietario de una identidad presentada, proporcionando una contraseña o algún otro factor exclusivo. La autorización es el proceso de permitir que un sujeto acceda a los recursos después de una autenticación exitosa, a menudo en otro sitio. Muchas personas piensan que OAuth es sinónimo de autenticación abierta, pero es más fácil entenderlo pensando en ello como AUTORIZACIÓN abierta (Open AUTHorization).

OAuth esencialmente permite al usuario, a través de un proveedor de autenticación con el que previamente se han autenticado con éxito, dar a otro sitio web/servicio un token de autenticación de acceso limitado para la autorización de recursos adicionales.

3. OAuth paso a paso

Supongamos que un usuario ya ha iniciado sesión en un sitio web o servicio (OAuth sólo funciona con HTTPS). A continuación, el usuario inicia una transacción que necesita para acceder a otro sitio o servicio no relacionado. Lo siguiente sucede (muy simplificado):

  1. El primer sitio web se conecta al segundo sitio web en nombre del usuario, utilizando OAuth, proporcionando la identidad verificada del usuario.
  2. El segundo sitio genera un token único y un secreto para la transacción y las partes implicadas.
  3. El primer sitio da este token y secreto al software cliente del usuario que inicia.
  4. El software del cliente presenta el token de solicitud y el secreto a su proveedor de autorización (que puede o no ser el segundo sitio).
  5. Si aún no está autenticado en el proveedor de autorización, se le pedirá al cliente que se autentique. Después de la autenticación, se pide al cliente que apruebe la transacción de autorización al segundo sitio web.
  6. El usuario aprueba (o su software aprueba en segundo plano) un tipo de transacción en particular en el primer sitio web.
  7. El usuario recibe un token de acceso aprobado (observe que ya no es un token de solicitud).
  8. El usuario entrega el token de acceso aprobado al primer sitio web.
  9. El primer sitio web da el token de acceso al segundo sitio web como prueba de autenticación en nombre del usuario.
  10. El segundo sitio web permite que el primer sitio web acceda a su sitio en nombre del usuario.
  11. El usuario ve una transacción completada satisfactoriamente.

OAuth no es el primer sistema de autenticación/autorización que funciona de esta manera en nombre del usuario final. De hecho, muchos sistemas de autenticación, como Kerberos, funcionan de manera similar. Lo que es especial acerca de OAuth es su capacidad para trabajar en toda la web y su amplia adopción. Tuvo éxito con las tasas de adopción donde los intentos anteriores fallaron (por varias razones).

4. Críticas y soluciones de OAuth

No existen estándares de autenticación perfectos en Internet. OAuth es particularmente criticado debido a los cambios drásticos entre las versiones 1.0 y 2.0. De muchas maneras, OAuth 2.0 es menos seguro, más complejo y menos prescriptivo que la versión 1.0. Los creadores de la versión 2.0 se centraron en hacer que OAuth fuera más interoperable y flexible entre sitios y dispositivos. También introdujeron el concepto de expiración de token, que no existía en la versión 1.0. Independientemente de la intención, muchos de los fundadores y partidarios originales levantaron sus manos y no apoyaron la versión 2.0.

Los cambios son tan significativos que la versión 2.0 no es compatible con la versión 1.0 e incluso implementaciones diferentes de la versión 2.0 pueden no funcionar entre sí. Sin embargo, nada impide que un sitio web soporte tanto 1.0 como 2.0, aunque los creadores 2.0 lo lanzaron con la intención de que todos los sitios remplacen completamente la versión 1.0.

Una de las mayores críticas de OAuth 2.0 es que el estándar intencionalmente no define o apoya el cifrado, la firma, o la verificación del cliente. En su lugar, OAuth espera que los “implementadores” utilicen un protocolo de protección “extra” como TLS (Transport Layer Security) para proporcionar esas características.

TLS puede proporcionar todas esas protecciones, pero depende de los implementadores utilizarlo. Los desarrolladores y los usuarios deben velar por que OAuth se ejecute dentro de la protección TLS. Los desarrolladores pueden implementar código para reforzar el uso de TLS y los usuarios deben ser conscientes de que TLS se utiliza cada vez que se les solicita ingresar credenciales de autenticación.

Caso de inseguridad con OAuth

Caso de inseguridad con OAuth

Debido a la falta de vinculación de seguridad inherente, es posible que un sitio web quisiera robar las credenciales legítimas de un usuario durante el proceso en el que se requiere que (el usuario) se autentique al proveedor de la autorización. Por ejemplo, un usuario está utilizando un primer servicio y elige una característica que obliga a una transacción OAuth con un segundo servicio. Es posible que el primer sitio web falsifique el segundo sitio web, de modo que puede recopilar las credenciales de autenticación del usuario y reaccionar como si la transacción de OAuth hubiera tenido éxito.

Esto no es sólo una amenaza teórica. El pasado mayo del 2017, un millón de cuentas de Google fueron fraudulentas. No existe un SSO perfectamente seguro y universalmente aceptado que funcione en todos los sitios web, pero con OAuth, nos estamos acercando. ¡Si te ha gustado el artículo, compártelo! 😉

¿Qué es OAuth y cómo funciona? Esto es lo que necesitas saber
5 (100%) 6 votes