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!

Anuncios

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, http://www.fotosyvideos.com, accede a las fotos que tienen sus usuarios en http://www.flickr.com, o a los vídeos que tienen en http://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

5. Listado de YouTube con SimpleXML.

En este post explicaremos cómo obtener un listado de los vídeos más vistos de YouTube desde PHP.

He armado un listado con las cuestiones que creo que hay que tener claras para hacer esto:

1. ¿Qué es el API de datos de YouTube y cómo se utiliza?

2. ¿Cómo obtengo el listado de los vídeos más vistos de YouTube?

3. ¿Cómo manipulo desde PHP el resultado obtenido?

Y estas las respuestas:

1. ¿Qué es el API de datos de YouTube y cómo se utiliza?

Pues no lo sé. Por una parte, según la Wikipedia: “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”. Mientras que, por otra, según Google: “Las API de datos de Google (“Google Data” abreviado) constituyen un sencillo protocolo estándar para leer e introducir datos en la Web”.

Como hasta hace poco mi idea de API era como la de la Wikipedia; es decir, algo así como un conjunto de llamadas a funciones o métodos ya programados, me he despistado un poco tras leer la definición del API de Google: “un sencillo protocolo estándar para leer e introducir datos en la Web”.

Supongo que, en realidad, viene a ser lo mismo, y al API de Google se le llama API porque hacemos llamadas a URLs que devuelven feeds en formato RSS o Atom, en vez de hacer llamadas a funciones o métodos ya programados. En cualquier caso, como explica el documento Protocol Basics de Google, podemos utilizar las API Google así: haciendo una petición HTTP a un servicio, a través de un URL con unos parámetros específicos.

De hecho, esto ya lo hemos hecho: en el artículo Geocodificación con PHP y el API Google Maps (3), de Quentin Zervaas (www.phpriot.com), hacíamos una petición HTTP al URL http://maps.google.com/maps/geo, especificando los parámetros q, key y output. También vimos esto en 2. cURL y su sintaxis, pero a lo griego, cuando usábamos cURL para obtener la respuesta del servicio de Google.

Resumiendo, si para Google Maps hacíamos una llamada al URL http://maps.google.com/maps/geo, ahora, para obtener un listado de los vídeos más vistos de YouTube, usaremos el URL http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed. Esta vez, sin embargo, la respuesta no es una dirección; sino un archivo XML en formato Atom.

2. ¿Cómo obtengo el listado de los vídeos más recientes de YouTube?

Con una llamada a http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed

3. ¿Cómo manipulo desde PHP el resultado obtenido?

Con SimpleXML, por ejemplo.

Ejemplo

Más concretamente, podemos armar un controlador como este:

 

class YoutubeController extends AppController{
var $name = 'Youtube';
var $uses = array();
function masVistos(){
   $apiURL = "<a href="http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed">
   $ch = curl_init();
   $timeout = 0;
   curl_setopt($ch, CURLOPT_URL, $apiURL);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
   $respuestaYoutube = curl_exec($ch);
   curl_close($ch);
   $feedAtom = new SimpleXMLElement($respuestaYoutube);
   $this->set('feedAtom',$feedAtom);
   }
}

Con su vista asociada, para mostrar por pantalla los vídeos más vistos:


   echo '
<h3>Los videos más vistos son...</h3>
';
   foreach ($feedAtom->entry as $entry){
      echo $entry->title.'
';
   }

Obtenemos así un listado con los vídeos más vistos de YouTube:

Los videos más vistos son…

Avril Lavigne – Girlfriend
Evolution of Dance
Chris Brown – With You
Rihanna – Don’t Stop The Music
Leona Lewis – Bleeding Love
Jeff Dunham – Achmed the Dead Terrorist
Lezberado: Revenge Fantasies
Charlie bit my finger – again !
Alicia Keys – No One
Hahaha
Timbaland – Apologize (feat. One Republic)
Chris Brown;Chris Brown featuring T-Pain – Kiss Kiss
Miley Cyrus – 7 Things – Official Music Video (HQ)
Akon – “Don’t Matter”
Potter Puppet Pals in “The Mysterious Ticking Noise”
Timbaland – The Way I Are OFFICIAL MUSIC VIDEO
Jonas Brothers – SOS Music Video – Official (HQ)
Oral
Crank Dat Soulja Boy Spongebob
guitar
Jonas Brothers – Burnin’ Up – Official Music Video (HQ)
High School Musical
Sean Kingston – Beautiful Girls
Vanessa Hudgens Say Ok Music Video (Official with Zac Efron)
Soulja Boy Tell`em – Crank That (Soulja Boy)

4. XML y la sindicación de contenidos web. RSS y Atom.

El documento que me quitaba el sueño, la Guía del desarrollador, protocolo de API de datos, supone que hemos leído y entendido el documento Aspectos generales de las API de datos de Google. ¿Qué te parece si en esta categoría, YouTube y CakePHP, profundizamos en el funcionamiento de las API de datos de Google? (La traducción al español del artículo de Quentin Zervaas, Geocodificación con PHP y el API Google Maps, ya explica cómo trabajar con Google Maps).

Una de las cosas más importantes es que estas API se basan en los formatos de sindicación estándar Atom y RSS. El siguiente video divulgativo, de los que a mí me gustan, RSS hablando en plata, explica qué es la sindicación de contenidos. El video original es RSS in plain english y http://dfwikilabs.org lo ha doblado al español.