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

Anuncio
09/04/2013
Departamento de Lenguajes y
Sistemas Informáticos
Consumo de Servicios RESTful (III)
Práctica 7
Arquitectura e Integración del Software
Curso 2012/2013
Índice




Introducción
OAuth 2
Usando OAuth 2 con GWT
Enlaces
1
09/04/2013
Introducción
 En la práctica, los servicios RESTful suelen requerir alguna forma de
identificar al cliente/consumidor de los recursos. Esto principalmente se
debe a 2 motivos:
 Por el coste que tiene la invocación del servicio para el proveedor se
quiere limitar el ratio de peticiones por cliente (o incluso cobrar por el
uso del servicio)
 La seguridad de los recursos (para que un usuario no pueda consultar o
modificar recursos sobre los que no tiene permisos).
 Hay varios métodos de autenticación. En las aplicaciones actuales, el
mecanismo más popular de autenticación es OAuth.
 En esta práctica…
 Aprenderemos como hacer que nuestra aplicación GWT utilice
OAuth2 para autenticarnos en diferentes aplicaciones (Google Drive y
Facebook).
Introducción
Visión general de la práctica
Cliente: Interfaz gráfica de
nuestro mashup (práctica 2)
1. Autenticación
Servicio RESTful de
múltiples recursos con
autenticación OAuth2
3. Token
2. Token
4. Invocación + Token
Servidor: Consumo de
servicios RESTful (prácticas
5-7)
2
09/04/2013
Índice




Introducción
OAuth 2
Usando OAuth 2 con GWT
Enlaces
OAuth 2
Descripción
 OAuth 2.0 es un protocolo para la autenticación de usuarios en servicios
RESTful de terceros.
 Aparece para evitar la autenticación directa del usuario en nuestra
aplicación con credenciales de otro servicio.
 En vez de autenticarse en nuestra aplicación, la ejecución se redirige al
servicio de terceros a usar para hacer la autenticación directamente con el
proveedor del servicio. Si la autenticación es correcta, el proveedor retorna
la ejecución a nuestra aplicación, indicando una clave de acceso (token).
 Esta clave de acceso (Access Token) solo es válida para nuestra aplicación, es
temporal (el tiempo de validez lo impone el proveedor) y siempre puede ser
revocada por el usuario.
 Usando la clave de acceso como parámetro se pueden invocar los servicios
RESTful del proveedor.
3
09/04/2013
OAuth2
Autenticación “directa” (sin OAuth)
Servicio REST
Aplicación
Usuario
Acceso a mi panel de videos
Consulta Vídeos de Usuario
¿Credenciales de Usuario?
¿Tus credenciales de YouTube?
UsuarioPaco, *****3
Consulta Videos de UsuarioPaco, *****3
Videos de UsuarioPaco
Panel con videos
Nuestra aplicación tiene
acceso a las credenciales del
usuario
OAuth2
Autenticación con OAuth
Servicio REST
Aplicación APP
Usuario
Acceso a mi panel de videos
Consulta URL de Login en Youtube para APP
URL de Login para APP
Redirige a URL de Login en YouTube para APP
UsuarioPaco, *****3
TOKEN temporal de UsuarioPaco para APP
Consulta Videos con TOKEN
Videos de UsuarioPaco
Panel con videos
Nuestra aplicación NO tiene acceso a las
credenciales del usuario, pero tiene que estar
registrada en el servicio
4
09/04/2013
OAuth2
Pasos genéricos para usar OAuth2
PASO 1: Registrar nuestra aplicación para el recurso correspondiente
indicando la Url de callback. El servicio nos proporcionará un CLIENT ID.
OAuth2
Pasos genéricos para usar OAuth2
PASO 2: Consultar la documentación del servicio para saber su URL de login
así como los permisos que permite.
5
09/04/2013
OAuth2
Pasos genéricos para usar OAuth2
PASO 3: La primera vez que nuestra aplicación requiera acceder al servicio
en nombre de un usuario (ej. subir un video a la cuenta del usuario en
youtube) la aplicación redirigirá al usuario a la URL de login indicando el
CLIENT ID (indentificador) y el SCOPE (permisos) que requerimos para el
recurso.
OAuth2
Pasos genéricos para usar OAuth2
PASO 4: El usuario se autenticará en la URL de login aceptando los permisos
requeridos (en caso contrario , no se podrá hacer uso del recurso).
6
09/04/2013
OAuth2
Pasos genéricos para usar OAuth2
PASO 5: El servicio invocará a la URL de callback de la aplicación enviándole
un ACCESS TOKEN. El token está asociado con el usuario, nuestra aplicación
y los permisos requeridos y es de carácter temporal). Notar que la
aplicación nunca llegará a conocer el usuario/clave del usuario, en su lugar
trabajará con el token.
Access Token:
ya29.AHES6ZQEnuWPfNEH5A7TGwDqijvFLQXBlJcUKnPwHUpwPtbuX4EoMw
OAuth2
Pasos genéricos para usar OAuth2
PASO 6: La aplicación podrá invocar a cualquier Servicio correspondiente a
los permisos requeridos pasando como parámetro el ACCESS TOKEN.
7
09/04/2013
OAuth2
Consideraciones
 Actualmente existen dos versiones principales de Oauth: OAuth1 y
OAuth2. No son compatibles entre ellos.
OAuth1
OAuth2
vs.
OAuth2
Consideraciones
 Cuando un token de acceso caduca hay que refrescar dicho token.
8
09/04/2013
OAuth2
Consideraciones
 Para implementar el protocolo Oauth (en cualquier versión) es
necesario que nuestra aplicación tenga una URL accesible en Internet
para recibir el token desde el servicio de login usado (facebook, google,
etc).
 Conclusión: Debemos desplegar la aplicación en el
AppEngine para hacer uso de OAuth. No se puede probar
en local.
OAuth2
Consideraciones
 Los permisos asociados con un Token los define la aplicación.
 Por ejemplo, Facebook define una gran cantidad de permisos diferentes:






Acceso a los datos básicos del usuario.
Datos protegidos como el email.
Acceso al muro.
Acceso a la lista de amigos.
Acceso a las fan pages.
Acceso a a las fotografías, etc.
 Incluso una aplicación puede definir sus propios permisos para permitir
que otras aplicaciones hagan uso de ésta a través de Facebook (Open
Graph).
9
09/04/2013
Índice




Introducción
OAuth 2
Usando OAuth 2 con GWT
Enlaces
Usando OAuth 2 con GWT
¿Cliente o Servidor?
 Recordemos que el consumo de servicios REST se hace en servidor
debido al SOP (Same-Origin-Policy).
 En GWT, la gestión de la navegación se hace en cliente, con lo que
tendremos que hacer el proceso de autenticación con OAuth2 en
cliente. Una vez que tengamos el token de acceso habrá que enviarlo a
servidor para consumir el servicio que nos interese.
 La gestión del protocolo OAuth es un poco compleja, pero vamos a
utilizar una librería para simplificarla:
https://code.google.com/p/gwt-oauth2/
10
09/04/2013
Usando OAuth 2 con GWT
GWT-OAuth2
 Para usar la librería en nuestro proyecto:
1. Descargamos el jar de la librería:
https://code.google.com/p/gwt-oauth2/downloads/detail?name=gwtoauth2-0.2-alpha.jar&can=2&q=
2.
Añadimos el jar al build path de la aplicación.
3.
Indicamos en el fichero del proyecto gwt que debemos utilizar dicha
librería:
Usando OAuth 2 con GWT
Registrando nuestra aplicación en el servicio
 GWT-OAuth2 necesita 3 valores para realizar la autenticación:
 Client ID
 URL del Servicio de Consulta de URL de Login
 Scope (permiso que se solicita, en caso de que sea necesario).
 Con esos valores y un objeto Auth de GWT-OAuth2, podemos iniciar el
proceso de autenticación llamando al método Login:
Objeto Auth
Parámetros
necesarios
Operación de Login
y resultado
11
09/04/2013
Usando OAuth 2 con GWT
Registrando los parámetros para nuestra aplicación
Ejemplo: Aplicaciones de Google
 La URL de login es la misma para todos los servicios:
https://accounts.google.com/o/oauth2/auth
 El Scope depende del servicio (API) de Google que queramos usar. Google
provee de una consola de control para todas sus APIs:
https://code.google.com/apis/console
 En la consola indicamos el nombre del proyecto que va a utilizar los servicios (el
proyecto es nuestra aplicación) y en la pestaña Services indicamos que APIs
queremos que pueda usar nuestra aplicación (en el login de un usuario nuestra
aplicación no podrá solicitar acceso al Scope de una API que previamente no se
haya autorizado en la consola de control).
 Solo nos faltaría el Client ID. Para crear el identificador de nuestra aplicación, lo
haremos en la pestaña API Access. Para crear el Client ID Google nos va a pedir
la url de Callback de nuestra aplicación. Esta URL la genera automáticamente la
librería GWT-OAuth2, y será:
http://{aplicacion}.appspot.com/{nombredeproyecto}/oauthWindow.html
Usando OAuth 2 con GWT
Registrando nuestra aplicación en el servicio
Ejemplo: Aplicaciones de Google (Pestaña Services)
Nombre de nuestra aplicación
Permisos
12
09/04/2013
Usando OAuth 2 con GWT
Registrando nuestra aplicación en el servicio
Ejemplo: Aplicaciones de Google (Pestaña API Access)
Datos de información
de nuestra Aplicación
URL de Aplicación y
URL de Callback (o Redirect)
http://urldenuestraplicación/oauthWindow.html
Usando OAuth 2 con GWT
Registrando nuestra aplicación en el servicio
Ejemplo: Aplicaciones de Google (Pestaña API Access)
Este es el Client ID que
usaremos en nuestra
aplicación
RESUMEN:
Client ID: El proporcionado por Google.
Url de Servicio de URL de Login: https://accounts.google.com/o/oauth2/auth
Scope: Depende del servicio. Por ejemplo, de Youtube: “https://www.googleapis.com/auth/youtube”
¡OJO! El Scope es una cadena sin un formato específico. En el caso concreto de los servicios de Google,
esas cadenas tienen formato de URL, pero, en general, el scope no tiene por qué tener formato URL.
13
09/04/2013
Usando OAuth 2 con GWT
Registrando los parámetros para nuestra aplicación
Ejemplo 2: Facebook
 La URL de login es la misma para todos los servicios de Facebook:
https://www.facebook.com/dialog/oauth
 Los tipos de permiso pueden consultarse en la documentación:
https://developers.facebook.com/docs/reference/api/
 Solo nos faltaría el Client ID. Para crear el identificador, tendremos que
registrar nuestra aplicación. Esto se puede hacer en:
https://developers.facebook.com/apps
Usando OAuth 2 con GWT
Registrando los parámetros para nuestra aplicación
Ejemplo 2: Facebook
Solo es obligatorio el App Name, que puede ser el que queramos (que no
existe).
14
09/04/2013
Usando OAuth 2 con GWT
Registrando los parámetros para nuestra aplicación
Ejemplo 2: Facebook
 Una vez creada la aplicación aparecerá el panel de control de la
aplicación y habrá que marcar que nuestra aplicación Web usará
Facebook Login:
Este es el Client ID
Aquí hay que indicar la URL
de Callback (usando GWTOAuth2 será la misma que
para google)
Índice




Introducción
OAuth 2
Usando OAuth 2 con GWT
Enlaces
15
09/04/2013
Enlaces
 Librería GWT-OAuth2
https://code.google.com/p/gwt-oauth2/
 Documentación OAuth
http://oauth.net/
 Documentación sobre autenticación OAuth2 en Google
https://developers.google.com/accounts/docs/OAuth2Login?hl=es
 API de Facebook
https://developers.facebook.com/
 APIs de Google
https://developers.google.com/
Disclaimer and Terms of Use
All material displayed on this presentation is for teaching and personal use only.
Many of the images that have been used in the presentation are Royalty Free
images taken from http://www.everystockphoto.com/. Other images have been
sourced directly from the Public domain, from where in most cases it is unclear
whether copyright has been explicitly claimed. Our intention is not to infringe
any artist’s copyright, whether written or visual. We do not claim ownership of
any image that has been freely obtained from the public domain. In the event
that we have freely obtained an image or quotation that has been placed in the
public domain and in doing so have inadvertently used a copyrighted image
without the copyright holder’s express permission we ask that the copyright
holder writes to us directly, upon which we will contact the copyright holder to
request full written permission to use the quote or images.
16
Descargar