Proyecto Keejoo, un cliente para twitter escrito en C. (Introducción a OAuth)

Introducción

El protocolo OAuth provee un método para que clientes accedan a recursos en un servidor sin ser el dueño del mismo. Provee un proceso para que los usuarios finales den permiso a aplicaciones de terceros para acceder a los recursos en el servidor sin hacer necesaria el intercambio del par/dato usuario/contraseña.

He empezado el desarrollo de un minicliente Twitter en Lenguaje C y usando las librerias GTK3 para Gnome 3. Es necesario conocer las bases sobre las que se sustenta el desarrollo de este Cliente para Twitter y es por eso que he escrito el articulo.


Nombre: Keejoo
Descripción: Cliente para Twitter.
Lenguaje: C
Librerias (Dependencias): libpng libxml2 gtk+-3.0 libcurl liboauth
IDE: Anjuta
URL: http://code.google.com/p/keejoo/
Plataforma: Fedora 15


Detalles

El protocolo OAuth fue originalmente creado por una pequeña comunidad de desarrolladores web de una variedad de sitios web y servicios de Internet para resolver el problema comun de permitir acceso delegado a recursos protegidos.

El protocolo OAuth resultante fue estabilizado a la versión en octubre de y revisado en Junio de 2009.

En el modelo de autenticación tradicional, el cliente usa credenciales (usuario/contraseña) para acceder a recursos hospedados por un servidor. Con el aumento de los servicios web distribuidos y la computación en la nube, aplicaciones de terceros requieren acceso a esos recursos hospedados en los servidores.

OAuth introduce un tercer rol en el modelo de autenticación tradicional Cliente/Servidor: El dueño del recurso. En el modelo OAuth, el cliente (que no es el dueño del recurso pero tiene relación con el) requiere acceso a los recursos controlados por el dueño del recurso, pero hospedados en el servidor. Ademas, OAuth permite al servidor verificar no solo la autorización del dueño del recurso, sino también la identidad del cliente que esta haciendo la petición.


Twitter

La API de autenticación de Twitter esta basada en OAuth. Esto quiere decir que hace falta una implementación del protocolo OAuth para poder acceder a los recursos alojados en el servidor Twitter.

Proceso de autenticación de Twitter

Antes de comenzar a hablar sobre el proceso de autenticación con twitter, necesitamos definir algunos conceptos utiles.

Token: Identificador unico usado por el servidor y usado por cliente para asociar peticiones de autenticación con el dueño del recurso cuando es requerida autorización o es obtenida por el cliente. Los Token tienen un par correspondencia Shared/Secret (Compartido/Secreto) utilizado por el cliente para establecer su propiedad sobre el token y para representar al dueño del recurso.

  • Consumer: Cliente

  • Service Provider: Servidor

  • User: Dueño del recurso.

  • Consumer Key and Secret: Credenciales del Cliente.

  • Request Token and Secret: Credenciales Temporales (se usan para la comunicación pre-autenticación con el servidor)

  • Access Token and Secret: Credenciales de Acceso (lo concede el servidor al cliente autorizado previamente por el dueño del recurso para que pueda acceder a los recursos alojados en el servidor)

El ciclo de autenticación es sencillo:

  1. Se recupera/obtiene el Request Token and Secret.
  1. Se solicita la autorización redireccionando al User a la pagina de acceso (login) Twitter.com. (Metodo PIN)
  1. Se cambia el Request Token and Secret por un Access Token and Secret

Cabecera de Keejoo para autenticación con Twitter

El archivo api_twitter.h contiene las funciones necesarias para la autenticación mediante el protocolo OAuth con Twitter.

char* get_token (char *resource, char **key, char **secret, char *oauth_key, char *oauth_secret, char **username):

Funcion para la recuperacion/obtencion del Request Token and Secret y el intercambio del Request Token and Secret recuperado por el Access Token and Secret

void get_authorize_url(char *oauth_token, char **authorize_url):

Devuelve la URL de acceso (login) Twitter de redirección para obtener autorizaciòn.

void create_file_with_access_token (char username[MAX_USERNAME_LENGTH],char *access_token_key, char *access_token_secret):

Crea un archivo binario que contiene una copia de las credenciales Access Token and Secret para su posterior uso. Evita la solicitud constante al Service Provider del Access Token and Secret usando una copia local de las ultimas credenciales.

int load_file_with_access_token(char username[MAX_FILENAME_LENGTH], char **access_token_key, char **access_token_secret):

Permite cargar la copia local de las credenciales Access Token and Secret creadas con la función anterior.

char* get_resource (char *resource, char *access_token_key, char *access_token_secret):

Solicita un recurso al Service Provider.

void get_token_in_parameters(char *reply, char **key, char **secret, char **username):

Obtiene los Token devueltos por el Service Provider en la URL de respuesta.

0 comentarios:

Publicar un comentario

Seguidores

Estadisticas