Práctica 7. Consumo de servicios RESTful (III)

Anuncio
Arquitectura e Integración de Sistemas Software
Curso 2012/2013
Consumo de servicios RESTful (III)
En prácticas anteriores hemos estudiado cono usar recursos RESTful para las 4
operaciones básicas (Consultar, Crear, Actualizar y Borrar). Actualmente, el uso de
estas operaciones públicamente requiere de la identificación tanto del usuario con
acceso a dicho recurso (seguridad de la información), como de la aplicación que va
a hacer uso del servicio (evitar abusos). En esta práctica, veremos cómo usar
autenticar con OAuth, un protocolo de delegación de la autenticación que usan la
mayoría de aplicaciones actuales (Facebook, Google, Foursquare, etc). Además,
veremos un ejemplo de aplicación GWT completa. El esquema general de la
práctica se muestra en la Figura 1.
Login
Servicio RESTful con
autenticacion OAuth2
REST+
REST
Figura 1. Esquema General de la Práctica
En la práctica de hoy, veremos 2 ejemplos de cómo obtener acceso a dos
aplicaciones distintas delegando la autenticación en dichas aplicaciones.
En concreto, vamos a invocar un recurso de Google Drive y otro de Facebook.
Aunque el consumo de los recursos ya está implementado, se adjunta la
descripción de las operaciones.
Recurso Friends
http://developers.facebook.com/docs/reference/api/user/#friends
Recurso Files de Google Drive
https://developers.google.com/drive/v2/reference/files
1
Arquitectura e Integración de Sistemas Software
Curso 2012/2013
Ejercicios
Ejercicio 0. Registrar una aplicación en AppEngine
Para poder realizar correctamente el protocolo de Autenticación con OAuth
nuestra aplicación debe estar accesible en Internet por lo que no podremos
realizar la autenticación con la ejecución local, sino en AppEngine.
Para ello, crearemos una aplicación en AppEngine. El ID de dicha aplicación
determinará la URL de acceso a la misma (Ver Práctica 1 en caso de ser necesario).
Ejercicio 1. Ejecutar la aplicación
Importar el proyecto provisto y estudiar las clases proporcionadas en el proyecto
poniendo
especial
atención
a
las
clases
GoogleDriveResource y
FacebookFriendsResource. Desplegar la aplicación en AppEngine y probar a
consultar la lista de Amigos de Facebook o el listado de Ficheros de Google Drive.
Notar que no se pueden realizar dichas operaciones sin un token de acceso.
Ejercicio 2. Obtener el Token de Acceso en Google.
El objetivo de este ejercicio es implementar la delegación del Login en los servicios
de Google para poder usar las operaciones CRUD sobre el recurso Files de Google
Drive.
a) Registro de la aplicación para obtener los parámetros para usar OAuth. Para
usar un objeto AUTH de la librería GWT-OAuth2 debemos indicar los
parámetros requeridos por dicho objeto.
Estos son:

Url del Servicio para obtener la URL Login de Google. Esta URL es la misma
para todos los servicios de Google:
https://accounts.google.com/o/oauth2/auth

Client ID de nuestra aplicación. Para ello, debemos registrar un proyecto en
la consola de APIs de Google:
https://code.google.com/apis/console/
Después de crear el proyecto, habrá que indicar a que servicios queremos que
pueda acceder el proyecto y, por último, crear un Client ID de Acceso (ver
transparencias). Para crear el Client ID, las aplicaciones solicitarán la URL de
Callback.
2
Arquitectura e Integración de Sistemas Software
Curso 2012/2013
Esta URL es manejada por la librería GWT-OAuth2 y es fija para un proyecto dado.
Esto es:
http://{nombredeaplicacionappengine}.appspot.com/{nombredeproyecto}/oauth
Window.html
El Client ID estará asociado con el proyecto que registremos con nuestro usuario
de Google.

Scope o permisos que queremos que la aplicación solicite al usuario que se
autentica. Google provee de varios permisos por aplicación. En el caso
concreto de Google Drive, los posibles scopes los podemos encontrar en:
https://developers.google.com/drive/scopes
Elegir un scope que permita consultar/crear/actualizar/borrar ficheros.
Rellenar dichos parámetros en la clase GoogleDriveListView.java en las
variables destinadas a dicho efecto.
b) Con los 3 parámetros completos, ahora debemos usar un objeto AUTH para
que al pulsar sobre el Botón “Authenticate with Drive”, se haga el Login con
dicho objeto. El comportamiento esperado al hacer login es que la
aplicación nos redirija al Login de Google y, si introducimos un login
correcto, la aplicación solicite el permiso que se haya indicado como Scope.
Si el usuario acepta, se recibirá un token. Almacenar dicho token en una
variable que se envíe a los servicios GWT-RPC de servidor para hacer la
invocación de los servicios REST de Google Drive.
Comprobar que las operaciones se ejecutan correctamente.
Nótese que para que las operaciones sobre el recurso Files funcionen
correctamente, ya se ha implementado tanto el consumo de los servicios con la
librería Restlet en servidor, como las clases para soportar los JSON de entrada y
salida de dichos servicios (en el paquete shared.domain.googledrive), como los
servicios GWT-RPC para solicitar desde cliente la invocación de esas operaciones
en servidor.
Se puede comprobar el efecto de los cambios en los ficheros accediendo
directamente a la aplicación web de Google Drive:
https://drive.google.com
(OJO: Hay cierta desincronización entre las acciones sobre los recursos y el efecto
en la aplicación).
3
Arquitectura e Integración de Sistemas Software
Curso 2012/2013
Ejercicio 3. Obtener el Token de Acceso en Facebook.
El objetivo de este ejercicio es poder hacer peticiones a servicios de Facebook.
Nótese que ya se ha implementado en FacebookFriendsResource el consumo del
Recurso friends, para hacer consultas sobre la lista de amigos de un usuario.
Registrar nuestra aplicación en Facebook para obtener los parámetros necesarios
para hacer el login en Facebook, esto es Client ID, URL del Servicio de URL de Login
y Scope (en caso de que sea necesario).
https://developers.facebook.com/apps
Facebook provee de una API muy extensa con multitud de recursos y scopes
(el llamado Graph API). Para la consulta de los amigos y otra información del
usuario podemos buscar los permisos necesarios en:
https://developers.facebook.com/docs/reference/api/user/
Completar los parámetros necesarios en la clase FacebookView, para que el objeto
AUTH nos permita delegar el login en Facebook y obtener el token de acceso.
Almacenar este token para poder invocar a los servicios GWT-RPC ya
implementados que hacen uso del token de acceso.
Ejercicios Extra
Ejercicio 4. Completar los tests
El objetivo de este ejercicio es poder hacer pruebas sobre los servicios sin requerir
de interacción con el usuario. Para ello, podemos indicar en el código de las clases
del paquete test tokens de acceso válidos que permitan ejecutar los tests sin tener
que desplegar la aplicación en AppEngine para hacer la autenticación manual.
4
Descargar