OAuth

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 21 de diciembre de 2020; las comprobaciones requieren 26 ediciones .
OAuth
Nombre OAuth
 Archivos multimedia en Wikimedia Commons

OAuth  es un protocolo (esquema) de autorización abierto que proporciona a un tercero acceso limitado a los recursos protegidos del usuario sin transferirle un nombre de usuario y una contraseña (al tercero) [1] [2] .

El trabajo en el protocolo comenzó en noviembre de 2006 y la última versión de OAuth 1.0 se aprobó el 4 de diciembre de 2007. Como desarrollo posterior, en 2010 apareció el protocolo OAuth 2.0, cuya última versión se publicó en octubre de 2012 como RFC 6749 .

Aplicación

Uno de los problemas de autenticación y seguridad de la información es que los usuarios suelen utilizar varios servicios diferentes (por ejemplo, en Google, Twitter, Apple , etc.) y, en consecuencia, varias cuentas con sus propios nombres de usuario y contraseñas. Por lo tanto, los usuarios necesitan almacenar y proteger muchos inicios de sesión y contraseñas. Dado que cada uno de los servicios tiene su propio sistema de seguridad con sus propias vulnerabilidades y deficiencias, todo esto va en detrimento de la comodidad y seguridad de los usuarios. Por ejemplo, si los usuarios usan las mismas contraseñas para diferentes servicios, luego de obtener acceso a una de las cuentas, el procedimiento de piratería de otras cuentas para los atacantes se simplifica enormemente [3] .

La autenticación en dos pasos (por ejemplo , Google Authenticator ) se puede utilizar para aumentar la seguridad, cuando se utiliza otro servicio de usuario para la confirmación (por ejemplo, cuando se requiere un código enviado a un teléfono móvil para la autenticación en un sitio web ). Con este enfoque, la probabilidad de piratería se reduce significativamente. La característica clave del uso de OAuth es que si el usuario tiene una cuenta bien protegida, con la ayuda de esta y la tecnología OAuth, puede autenticarse en otros servicios, mientras que el usuario no necesita revelar su contraseña principal. Por ejemplo, un usuario que quiera dar acceso a un servicio de impresión de fotos en línea a las fotos de su cuenta de Facebook no necesita proporcionar al servicio la contraseña de esa cuenta. En su lugar, pasa la autorización a Facebook, que (con el permiso del usuario o del administrador del servicio) ya proporciona el servicio de impresión en línea con el acceso necesario a las fotos [3] .

Historia

OAuth 1.0

OAuth apareció en noviembre de 2006, durante el desarrollo del protocolo OpenID para el servicio de microblogging Twitter de Blaine Cook .  Junto con Chris Messina , estaba buscando una forma de usar OpenID para proporcionar acceso a la API de Twitter sin dar una contraseña al servicio. En colaboración con el cocreador de OpenID, David Recordon , analizaron la funcionalidad de OpenID, así como los protocolos de autorización patentados , como Flickr Auth , Google AuthSub y Yahoo! BBAuth , después de lo cual llegaron a la conclusión de que se necesita un nuevo protocolo abierto [4] .    

En abril de 2007 se formó un grupo de ingenieros para trabajar en su creación. En su trabajo participaron empleados de Google y AOL (que al mismo tiempo introdujeron su propio protocolo OpenAuth ). La versión final del núcleo del protocolo OAuth 1.0 se lanzó el 4 de diciembre de 2007. En 2008 se trabajó en la estandarización del protocolo en el Internet Engineering Council [4] .

El 15 de abril de 2009, Twitter ofreció a sus usuarios una solución que permite que sitios y servicios de terceros accedan a sus cuentas. Se llamaba "Iniciar sesión con Twitter" y se basaba en OAuth. Este evento desencadenó el primer estudio extenso de vulnerabilidad del protocolo y, unos días después, se descubrió una vulnerabilidad potencial que afectaba a todas las implementaciones de OAuth existentes. Después de eso, el 23 de abril, la comunidad de desarrolladores lanzó la primera adición de seguridad al protocolo, que se incluyó en la especificación OAuth Core 1.0 Revisión A actualizada, publicada el 24 de junio. En abril de 2010, se publicó el libro blanco RFC 5849 sobre el estándar OAuth [4] .

OAuth 2.0

En 2010, se comenzó a trabajar en una nueva versión del protocolo OAuth 2.0 que no era compatible con versiones anteriores de OAuth 1.0 [1] . En octubre de 2012, se publicó el marco para OAuth 2.0 en RFC 6749 y el uso de token bearer en RFC 6750 .

Había varios requisitos previos para crear OAuth 2.0. En primer lugar, OAuth no es trivial de usar en el lado del cliente. Uno de los objetivos en el desarrollo del nuevo OAuth es facilitar el desarrollo de aplicaciones cliente. En segundo lugar, a pesar de la implementación de tres métodos (llamados flujos) declarados en el estándar para obtener  un token (identificador único) para autorización: para aplicaciones web, clientes de escritorio y clientes móviles, de hecho, los tres métodos se fusionan en uno. Y, en tercer lugar, el protocolo resultó ser poco escalable. Además de nuevas transmisiones, se le agregaron [5] [6] :

Actualmente, OAuth 2.0 es utilizado por una gran cantidad de servicios, como Google , Instagram , Facebook , VKontakte y otros.

Desarrollo posterior

En julio de 2012, Eran Hammer, el actual editor del estándar OAuth 2.0, anunció su renuncia después de tres años de trabajar en el nuevo estándar y solicitó que se elimine su nombre de las especificaciones. Habló sobre sus puntos de vista en su sitio web [7] y luego dio una charla [8] . David Recordon también eliminó su nombre de la especificación sin dar razones [ 9 ] .  Dick Hardt se convirtió en el editor del estándar OAuth2.0 y, a pesar de las opiniones de Eran Hammer, el marco OAuth 2.0 se publicó en RFC 6749 en octubre de 2012 [1] .

Comparación con otros protocolos

Beneficios

Cuando se utiliza la autorización OAuth , el usuario no transfiere su nombre de usuario y contraseña a los recursos protegidos directamente a la aplicación [3] . Es por eso:

En caso de autorización sin utilizar el protocolo OAuth, el usuario debe enviar su nombre de usuario y contraseña. Este método tiene desventajas adicionales [3] :

Diferencia de OpenID

Aunque OAuth y OpenID tienen mucho en común, OAuth es un protocolo por derecho propio y no tiene nada que ver con OpenID [10] :

Descripción de los protocolos OAuth

Conceptos básicos utilizados en los protocolos y ejemplos de su uso.

Cliente, servidor y propietario del recurso

OAuth 1.0 define tres roles: cliente, servidor y propietario del recurso. Estos tres roles están presentes en cualquier operación de OAuth, en algunos casos el cliente también es el propietario del recurso. La versión original de la especificación utiliza un conjunto diferente de términos para estos roles: consumidor (cliente), servicio (servidor) y usuario (propietario del recurso) [11] . En el protocolo OAuth 2.0, había una separación de roles de servidor: un servidor de autorización y un servidor que almacena recursos protegidos se asignan por separado [6] .

Métodos para crear firmas

OAuth admite 3 métodos de firma que se utilizan para firmar y validar solicitudes: PLAINTEXT , HMAC - SHA1 y RSA - SHA1 . PLAINTEXT es trivial de usar y toma mucho menos tiempo para calcular, pero solo puede ser seguro a través de HTTPS o canales seguros similares. HMAC : SHA1 ofrece un algoritmo simple y genérico que está disponible en la mayoría de las plataformas, pero no en todos los dispositivos heredados, y utiliza una clave compartida simétrica. RSA - SHA1 proporciona seguridad mejorada con un par de claves, pero es más complejo y requiere la generación de claves [12] .

Marca de tiempo y Nonce

Para evitar la amenaza de reutilización de solicitudes, OAuth utiliza un nonce y una marca de tiempo . El término "nonce" se usa para referirse a un código único, que es un conjunto aleatorio de letras y números y está diseñado para identificar de manera única una solicitud. Tener un identificador único en una solicitud le permite al proveedor de servicios evitar que se reutilice. Este enfoque se implementa generando una cadena única para cada solicitud enviada al servidor por el cliente. Para evitar la reutilización de solicitudes, el servidor DEBE almacenar los nonces recibidos [12] .

Sin embargo, almacenar todos los nonces recibidos puede resultar muy costoso para el servidor. Para evitar una sobrecarga de almacenamiento excesiva en OAuth, se agrega una marca de tiempo a cada solicitud, lo que permite que el servidor solo almacene el nonce durante un período de tiempo limitado especificado. Al recibir una solicitud con una etiqueta anterior a la permitida, el servidor la rechaza [12] .

Poderes y fichas

OAuth 1.0 y OAuth 2.0 utilizan tres tipos de autoridad: credenciales de cliente ( clave de consumidor  y secreto o credenciales de cliente ) ,  credenciales temporales ( token de solicitud y secreto o credenciales temporales ) y tokens ( token de acceso y secreto o credenciales de token en inglés ) [13] [ 3] .     

Las credenciales del cliente se utilizan para autenticar al cliente. El servidor puede proporcionar servicios especiales a los clientes, como limitar el acceso gratuito o proporcionar al propietario del recurso información más detallada sobre los clientes que intentan acceder a los recursos protegidos. En algunos casos, las credenciales de los clientes no son seguras y solo se pueden usar con fines informativos, como en aplicaciones de escritorio.

El token se usa en lugar del nombre y la contraseña del propietario del recurso. El propietario del recurso no revela sus credenciales al cliente, pero permite que el servidor emita un token al cliente, una clase especial de credenciales que proporciona al cliente algunas capacidades limitadas. El cliente usa el token para acceder a un recurso protegido sin conocer la contraseña del propietario del recurso. El token consiste en una firma digital, generalmente (pero no siempre) un conjunto aleatorio de letras y números que es único y criptográficamente fuerte, y una clave para proteger el token del uso no autorizado. El token está limitado en términos de autoridad y duración y puede ser revocado en cualquier momento por el propietario del recurso, sin afectar los tokens emitidos a otros clientes [13] .

El proceso de autorización de OAuth también utiliza un conjunto de credenciales temporales que se utilizan durante la etapa de solicitud de autorización. Para atender a diferentes tipos de clientes (interfaz web, escritorio, móvil, etc.), los permisos temporales ofrecen flexibilidad y seguridad adicionales [13] .

OAuth 1.0

Expliquemos cómo funciona el protocolo OAuth 1.0 usando un ejemplo [13] . Supongamos que un usuario (propietario del recurso) desea imprimir sus fotos (recursos) cargadas en photos.example.net (servidor) mediante el servicio de impresión "printer.example.net" (cliente).

  1. El cliente envía una solicitud al servidor a través del protocolo HTTPS , que contiene la identificación del cliente, la marca de tiempo, la dirección de devolución de llamada (usándola para devolver el token), el tipo de firma digital utilizada y la firma en sí.
  2. El servidor reconoce la solicitud y responde al cliente con un token de solicitud  y parte del secreto compartido.
  3. El cliente pasa el token al propietario del recurso (usuario) y lo redirige al servidor para la autenticación.
  4. El servidor, después de haber recibido un token del usuario, le solicita su nombre de usuario y contraseña, y en caso de autenticación exitosa, le pide al usuario que confirme el acceso del cliente a los recursos (se produce la autorización), luego de lo cual el servidor redirige al usuario. al cliente.
  5. El cliente envía un token de solicitud al servidor a través del protocolo TLS y solicita acceso a los recursos.
  6. El servidor reconoce la solicitud y responde al cliente con un nuevo token de acceso . 
  7. Usando un token de acceso, el cliente accede al servidor en busca de recursos.
  8. El servidor reconoce la solicitud y proporciona los recursos.

OAuth 2.0

El protocolo OAuth 2.0 no es compatible con el protocolo OAuth 1.0 [1] . En lugar de complementar OAuth 1.0, se tomó la decisión de desarrollar un protocolo diferente [10] . Por lo tanto, la forma en que funcionan OAuth 1.0 y OAuth 2.0 es diferente. Entonces, en el estándar OAuth 2.0 se describen los siguientes flujos (escenarios de interacción de las partes) [1] :

Es el flujo de protocolo más corto: el cliente primero redirige al usuario al servidor para permitir el acceso a los recursos y, una vez concedido el acceso, el servidor lo redirige de nuevo al cliente [10] . La diferencia entre este flujo y el flujo de acceso implícito radica en el paso adicional de autenticación del cliente [10] . Las diferencias entre este flujo y el ejemplo anterior son las siguientes: en el paso 2, el servidor, además del token de acceso, que tiene una duración limitada, emite un token de actualización; en el paso 8, el servidor verifica si el token de acceso es válido (en el sentido de vencimiento de la vida útil) y, dependiendo de esto, otorga acceso a los recursos o requiere una actualización del token de acceso (que se proporciona al presentar un token de actualización). ). En este flujo, el propietario del recurso proporciona al cliente un nombre de usuario y una contraseña, los pasa al servidor y recibe un token para acceder a los recursos. A pesar de que este modo de operación contradice un poco el concepto de crear un protocolo, se describe en la especificación. En este modo de funcionamiento del protocolo, el servidor proporciona un token de acceso después de que el cliente transfiere su usuario y contraseña, que previamente fue establecido por el servidor de autorización (la especificación no especifica cómo). De hecho, el cliente pasa inmediatamente tanto la autorización como la autenticación.

OAuth admite dos métodos para autenticar mensajes del cliente: HMAC - SHA1 y RSA - SHA1 . Es posible enviar mensajes sin firma, luego se indica " texto sin formato " en el campo de tipo de firma. Pero en este caso, según la especificación, la conexión entre el cliente y el servidor debe establecerse mediante el protocolo SSL o TLS [13] .

Notas

  1. 1 2 3 4 5 D. Hardt, ed. El marco de autorización de OAuth 2.0 . Introducción  (inglés) . Grupo de trabajo de ingeniería de Internet (octubre de 2012) . Consultado el 30 de octubre de 2015. Archivado desde el original el 14 de mayo de 2016.
  2. E. Hammer-Lahav, ed. El protocolo OAuth 1.0   // IETF . - 2010. - Abril. — ISSN 2070-1721 .
  3. 1 2 3 4 5 6 Gibbons K. , Raw J. O. , Curran K. Evaluación de seguridad del marco OAuth 2.0  // Gestión de la información y seguridad informática - Emerald Publishing Limited , 2014. - Vol . 22, edición. 3.- ISSN 0968-5227 ; 1758-5805
  4. 1 2 3 Eran Martillo. La guía OAuth 1.0. Historia  (inglés) . Consultado el 30 de octubre de 2015. Archivado desde el original el 25 de octubre de 2015.
  5. Eran Martillo. Presentamos OAuth 2.0  (  enlace muerto) . hueniverse.com. Fecha de acceso: 30 de octubre de 2015. Archivado desde el original el 15 de enero de 2011.
  6. 1 2 Ryan Boyd. Introducción // Primeros pasos con OAuth 2.0 . - 1ª ed. - 1005 Gravenstein Highway North, Sebastopol: O'Reilly Media, Inc., 2012. - P. 67. - 9-12, 23-24 p. - ISBN 978-1-449-31160-5 .
  7. Eran Martillo. OAuth 2.0 y Road to Hell  (inglés)  (enlace no disponible) . Hueniverso (26 de julio de 2012). Consultado el 14 de junio de 2017. Archivado desde el original el 25 de marzo de 2013.
  8. Eran Martillo. OAuth 2.0 - Mirando hacia atrás y  avanzando . hueniverso. Fecha de acceso: 30 de octubre de 2015. Archivado desde el original el 22 de octubre de 2015.
  9. D. Hardt. Marco de autorización de OAuth 2.0: uso de token de portador draft-ietf-oauth-v2-bearer-23 . Apéndice B. Historial del documento  ( 1 de agosto de 2012) . Fecha de acceso: 30 de octubre de 2015. Archivado desde el original el 16 de noviembre de 2015.
  10. 1 2 3 4 5 6 7 Chen E. Y. , Pei Y. , Chen S. , Tian Y. , Kotcher R. , Tague P. OAuth desmitificado para desarrolladores de aplicaciones móviles  // Actas de la Conferencia ACM SIGSAC de 2014 sobre - NYC : ACM , 2014. - Pág. 892-903. - ISBN 978-1-4503-2957-6 - doi:10.1145/2660267.2660323
  11. Eran Martillo. Terminología  (inglés) . hueniverso. Fecha de acceso: 31 de octubre de 2015. Archivado desde el original el 1 de noviembre de 2015.
  12. 1 2 3 Eran Martillo. Marco  de seguridad . hueniverso. Consultado el 31 de octubre de 2015. Archivado desde el original el 5 de noviembre de 2015.
  13. 1 2 3 4 5 E. Hammer-Lahav, ed. El protocolo OAuth 1.0  . Grupo de Trabajo de Ingeniería de Internet . Consultado el 8 de noviembre de 2015. Archivado desde el original el 10 de noviembre de 2015.

Enlaces