10. Diagrama de flujo del proceso de autenticación OAuth

Estoy echando un vistazo a dos recursos que explican desde diferentes ángulos el diagrama de flujo del proceso de autenticación OAuth. He tomado algunas notas y he hecho un pequeño resumen de lo que creo haber entendido. El primer enlace es La guía de iniciación a OAuth, de Hueniverse; el segundo, La guía del desarrollador de Google.

¿Qué tal si hacemos clic en los dos y los vemos al mismo tiempo? ;-) A mí me ha ido muy bien leer lo que dice uno y compararlo en el otro. Hueniverse explica, a través de los programas de ejemplo faji y beppa, cómo ve el usuario el proceso OAuth (personalmente me ha gustado mucho y lo encuentro muy práctico y sencillo). Por otra parte, el enlace de La guía del desarrollador de Google es bastante más técnico y presenta, en 14 pasos, el diagrama de flujo del proceso OAuth. En un contexto CakePHP y YouTube, mi resumen sería este:

El programa CakePHP pide a Google un token de autorización; éste nos lo envía, pero antes comprueba que estamos registrados; nuestra aplicación web redirecciona al usuario a la página de YouTube y el usuario se autentica; el token de autorización se convierte entonces en un token de acceso y YouTube redirecciona al usuario a nuestra página CakePHP; CakePHP se conecta a YouTube para intercambiar el token de autorización por el de acceso y YouTube se lo devuelve; finalmente, cuando se asocia el token de acceso a la cuenta de YouTube del usuario, el programa ya puede enviar peticiones API autenticadas en nombre del usuario. ¡Puf! ¡Parece la jugada de un partido de fútbol!

9. Entendiendo OAuth. Definiciones básicas.

La Guía de OAuth para principiantes, escrita por Eran Hammer-Lahav y publicada por Hueniverse, cubre muchos de los temas que se necesitan para entender e implementar este protocolo. En la primera parte, visión general, define algunos conceptos básicos necesarios para entender OAuth. Esta obra tiene una licencia Creative Commons 3.0 de reconocimiento, no comercial y sin obras derivadas.

Estas son algunas definiciones de los conceptos básicos que maneja OAuth según la Guía de OAuth para principiantes. Estos conceptos son los mismos que trata la especificación técnica del protocolo OAuth 1.0, publicada el 4 de diciembre de 2007.

Proveedor del servicio. El proveedor del servicio controla todos los aspectos de la implementación OAuth. Este término se utiliza para describir el sitio o servicio web donde se encuentran los recursos restringidos. Puede tratarse de un sitio para compartir fotos donde los usuarios guardan sus álbumes, un servicio de banca en línea, un sitio de microblogging, o cualquier otro servicio que almacene material privado del usuario.

Usuario. Es la razón de ser de OAuth. Si no hay usuarios, no hay necesidad de OAuth. Los usuarios tienen material privado en el proveedor del servicio pero quieren compartirlo con otro sitio. En OAuth, el protocolo se detiene, sin intervención manual con el usuario, al menos una vez, para recibir el permiso que otorga el acceso.

Consumidor. Un nombre curioso para una aplicación que intenta acceder a los recursos del usuario. Puede ser un sitio web, un programa de escritorio, un dispositivo móvil o cualquier cosa conectada a Internet. El consumidor es el que pide permiso para acceder a los recursos y es aquí donde se lleva a cabo la parte más útil de OAuth. OAuth define un desarrolador de consumidor como la entidad que escribe código que interactúa con el proveedor del servicio.

Recursos protegidos. Es el material que protege OAuth y al que permite el acceso. Pueden ser datos (fotos, documentos, contactos), actividades (el post de un blog, fondos de transferencia) o cualquier URL que necesite restringir el acceso.

Tokens. Para acceder a los recursos se utilizan tokens en vez de credenciales de usuario. Generalmente, un token es una cadena aleatoria, única, de letras y números, difícil de adivinar, que forma pareja con un secreto que protege al token de los malos usos. OAuth define dos tipos diferentes de tokens: tokens de petición y tokens de acceso.

8. OAuth, CakePHP y YouTube

¿Qué es OAuth?

La autenticación OAuth es el proceso mediante el que los usuarios de nuestra aplicación CakePHP conceden acceso a sus recursos protegidos de YouTube sin compartir sus credenciales con nosotros. Gracias a este protocolo, los programas pueden acceder a través de una API a los recursos protegidos que sus usuarios tienen en otros sitios.

Funcionamiento de OAuth desde el punto de vista del usuario

Supongamos, por ejemplo, que nuestro sitio CakePHP, www.fotosyvideos.com, accede a las fotos que tienen sus usuarios en www.flickr.com, o a los vídeos que tienen en www.youtube.com. Con OAuth los usuarios no tienen que darnos sus credenciales, mientras que sin un protocolo como este el programa pediría el login y password para poder acceder a los datos protegidos proporcionados por Flickr o YouTube.

Todo esto se traduce en más seguridad. Como explica la Guía OAuth para principiantes, dar nuestro nombre de usuario y contraseña a un sitio web para que obtenga de otro sitio web nuestra lista de contactos, es lo mismo que ir a cenar y dar nuestro código al camarero en el momento de pagar con la tarjeta. Ciertamente, los usuarios se arriesgan cuando comparten su información privada con otros sitios o personas. Todo esto y más lo explica muy bien el sitio oficial de OAuth (en inglés).

En resumen, este post presenta el protocolo OAuth, gracias al cual las aplicaciones de escritorio, móviles y web interactúan de forma segura con datos protegidos. Hemos descubierto que este protocolo permite autorizaciones API de forma sencilla, abierta, estándar y segura. Finalmente, al preguntarnos por el funcionamiento de OAuth desde el punto de vista del usuario, hemos visto que es seguro porque éstos no tienen que darnos sus credenciales.

Información de OAuth en español aquí:

http://www.error500.net/oauth-identificacion-abierta

http://www.econectados.com/2007/10/oauth-protocolo-de-autentificacion-segura-para-apis/

http://www.lacofa.es/index.php/tecnologias/futuro-de-internet/oauth-primer-paso-hacia-el-control-de-la-informacion-de-personalizacion

http://www.webmasterlibre.com/2008/06/30/oauth-autenticacion-segura-para-apis/

7. Servicios Web en Internet y algo más sobre REST

Google nos explica en qué consiste la tecnología REST:

Otras explicaciones muy buenas sobre este tema: una es es de Nokrosis y el enlace es este; también adjunto este artículo, Servicios Web con PHP, de www.malditainternet.com.

6. He descubierto que el API de YouTube es REST

“Una interfaz de programación de aplicaciones o API (del inglés Application Programming Interface) es el conjunto de funciones y procedimientos (o métodos si se refiere a programación orientada a objetos) que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción”.

- Wikipedia. La enciclopedia libre

Según esta definición, como la entendía antes de descubrir las APIs Web, me preguntaba lo siguiente: ¿Dónde están las funciones y los procedimientos cuando armo un listado de vídeos de YouTube?, ¿dónde están estas funciones cuando obtengo un Google Maps?

Roy Thomas Fielding y REST

Roy Thomas Fielding es uno de los principales autores de la especificación HTTP (RFC 2616) y obtuvo su doctorado hace nueve años, en 2000, en la Universidad de California, con su tesis Estilos Arquitecturales y el Diseño de Arquitecturas Software basadas en Red. En este trabajo, Fielding presenta la Transferencia de Estado Representacional, o REST (Representational State Transfer).

Para qué sirve REST

Actualmente, el término REST hace referencia a un enfoque para desarrollar y proporcionar servicios web y es una alternativa a los servicios web SOAP. No tengo ninguna experiencia en SOAP y hablaré poco de él para no meter mucho la pata.

Por lo que creo haber entendido, hay muchas diferencias en el funcionamiento de estas dos tecnologías. Por ejemplo, con SOAP, que se basa en RPC, tenemos un conjunto de métodos que hacen algo, mientras que en REST los que hacen algo son los recursos, identificados por un URL.

Qué es un servicio web

Según el W3C: “Un conjunto de aplicaciones o tecnologías con capacidad para interoperar en la Web. Estas aplicaciones o tecnologías intercambian datos entre sí con el objetivo de ofrecer unos servicios. Los proveedores ofrecen sus servicios como procedimientos remotos y los usuarios solicitan un servicio llamando a estos procedimientos a través de la Web“.

Cómo funcionan las APIs basadas en REST

Bueno, pues las funciones o métodos que yo buscaba ¡son los URL! Si en RPC teníamos métodos como getUser(), addUser() o removeUser(), ahora, en REST, tenemos recursos identificados con URLs. Como explica muy bien la Wikipedia:  “Los clientes trabajan con estos recursos a través de las operaciones estándar de HTTP, como GET para descargar una copia del recurso“.

Más concretamente, esto es lo que se hace aquí, por ejemplo, cuando le pedimos al geocodificador de Google que nos mande un mapa. Esto es lo que hicimos, también, aquí, cuando le pedimos a YouTube que nos mandara un listado con los vídeos más vistos. En ambos casos, la respuesta que recibimos de este recurso es un XML, aunque esto se puede parametrizar en el URL de consulta para que sea, por ejemplo, otra, como JSON.

¿Entonces, qué es el API de YouTube?

No hace mucho, algunas compañías comenzaron a liberar sus APIs: Amazon, Yahoo!, Google, etc. En otras palabras, expusieron sus servicios web en forma de recursos REST, a través de un URL, para que los consumidores de estos servicios (los programadores) pudieran acceder a este procesamiento a través del protocolo HTTP.  El API de YouTube es, pues, un servicio web basado en REST.

Dónde está REST

¿Recuerdas que estos días descubrimos el funcionamiento de los blogs y de los feeds RSS, gracias al videotutorial RSS hablando en plata? ¡Pues resulta que la tecnología que hay detrás de ellos es REST! Ciertamente, los lectores de feeds consultan un URL, el del feed, que devuelve un XML.

Hasta otra

Espero que este post te haya gustado y lo encuentres útil. Ya conocemos un poco mejor qué es esto que andamos tocando (¡APIs REST!) y cómo utilizarlas, que es de lo que se trata; si encuentras algún fallo, ¡deja aquí algún comentario!

Más información de todo este asunto aquí…

http://es.wikipedia.org/wiki/Representational_State_Transfer

http://www.ibm.com/developerworks/xml/library/x-youtubeapi/

http://phpwebservices.blogspot.com/2008/01/rest-with-php_20.html

www.di.uniovi.es/~cueva/asignaturas/doctorado/2006/trabajos/Ponencia%20REST.pdf

http://es.wikipedia.org/wiki/Roy_Fielding

http://www.sematopia.com/?p=153