OAuth. Compartir información entre distintas aplicaciones.

oauth A medida que la red crece y ofrece más y más servicios nos encontramos con sitios web que delegan en terceros ciertos servicios o que se apoyan en otros sitios para ofrecer tal o cual funcionalidad. Un ejemplo claro de esto son las redes sociales que nos ofrecen buscar a nuestros amigos y para ello nos piden nuestro usuario y contraseña de gmail. Al introducir nuestros datos, buscan entre nuestros contactos para indicarnos si algunos de los existe en la red social.

A todos nos parece muy útil pero es claramente inseguro, estamos introduciendo el usuario y contraseña de nuestra cuenta de correo (que muchas veces coincide con el de nuestra cuenta bancaria) y el sitio web donde la introducimos podría utilizar estos datos para cualquier propósito (secuestrar nuestra cuenta, espiar nuestro correo, borrar todos nuestros correos). Al proporcionar nuestros datos estamos facilitando información confidencial y permitiendo que terceros utilicen esta información como mejor les parezca.

image

Según la Wikipedia, OAuth es un protocolo abierto, propuesto por Blaine Cook y Chris Messina, que permite autorización segura de un API de modo estándar y simple para aplicaciones de escritorio, móviles, y web.

Imaginemos una red social llamada ComTalk que nos solicita nuestro usuario y contraseña de Gmail para buscar amigos entre nuestros contactos de correo. Según la terminología OAuth, Gmail sería el Service Provider, nuestros contactos serían Protected Resources y ComTalk sería el Consumer y utilizará OAuth para obtener acceso a nuestros contactos.

Antes de que suceda nada ComTalk tendría que haber añadido soporte para poder importar contactos de Gmail. Un desarrollador de ComTalk (Consumer Developer) habría obtenido un Consumer Key y Consumer Secret de Gmail para poder usar el API OAuth de Gmail.

Cuando el usuario pulse en importar contactos de GMail, en lugar de solicitar que introduzca el usuario y contraseña de su cuenta de correo, ComTalk solicitará a Gmail un Request Token. Gmail responderá con el Request Token y en ese momento ComTalk redirigirá al usuario a la URL de autorización del usuario de Gmail (OAuth User Authorization URL) enviando como parámetro el Request Token y pidiendo solicitando a Gmail que, una vez finalizado el proceso redirija al usuario a su URL (por ejemplo www.ComTalk.com/order)

Ahora el usuario introducirá su identificador y contraseña de Gmail, pero lo hará en la página de autorización de Gmail, no en la red social ComTalk y se le mostrará una página de aviso indicando que ComTalk quiere acceder a información sobre sus contactos. El usuario puede aceptar compartir esa información con la red social solamente durante un tiempo determinado, y puede permitir acceso solamente de lectura por ejemplo a esos datos. De este modo el usuario autoriza el tipo de permiso que desea (sólo lectura), aqué recursos proporciona acceso y el tiempo durante el que es efectivo.

Una vez aceptado, Gmail marca el Request Token como autorizado y el usuario es redirigido a la url que ComTalk indicaba (www.ComTalk.com/order), de este modo ComTalk sabe que puede continuar con el proceso. Ahora ComTalk intercambia su Request Token (que ha sido autorizado) por un Access Token y accede a los datos de los contactos de Gmail.

Se utilizan Request Token para obtener la aprobación del usuario y Access Token para acceder a los Protected Resources (los datos de los contactos).

image

Aquí puedes encontrar una excelente guía práctica que explica paso a paso como generar la petición OAuth firmada.

José Manuel Martín

Me llamo Jose Martin, me dedico al mundo del e-learning desde el año 2001. Actualmente soy Director de producto en NETEX y estoy especialmente interesado en: Gamificación, Learning Analytics, Mobile learning, learning Experience Platforms y, en general, todos los proyectos de formación online que requieren de una parte tecnológica y de innovación importante.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *