REST Avanzado
REST Avanzado
REST Avanzado
REST avanzado
Sistemas de Informacin Orientados a Servicios
R O D R I G O S A N T A M A R A
OAuth
Flask
REST avanzado
Objetivo
3
OAuth
4
D E F I N I C I N: R O L E S Y M O D O S
OAUTH 2.0
CLAVE Y PALABRA SE CRE TA
COMPOSICIN Y CODIFICACIN
TOKE N DE ACCE SO
USO
OAuth: roles
6
Rol
Sinnimo
Descripcin
Cliente
Aplicacin
Proveedor
(del recurso)
API
Propietario
(del recurso)
Usuario
OAuth: modalidades*
7
OAuth Echo
OAuth de 4 patas, aade el rol del delegador, un
proveedor secundario que acta a travs del proveedor
primario
* Twitter cuenta con una buena explicacin de estas y otras modalidades
OAuth 2.0
8
protocolo
Sin embargo, el diseo del protocolo puede inducir
a problemas importantes de seguridad a resolver
durante su implementacin
http://hueniverse.com/2012/07/26/oauth-2-0-and-the-road-to-hell/
https://www.youtube.com/watch?v=tFYrq3d54Dc
3-legged
cliente
(p. ej. mi app)
credenciales
peticin que requiere confirmacin de usuario
cdigo
cdigo + credenciales
proveedor
(p. ej. Facebook)
garantizas
acceso?
token de acceso
3
peticin + token
usuario
*Por qu Base64?
Ejemplo 1 (curl)
curl --request 'POST' 'https://api.twitter.com/oauth2/token' -header 'Authorization: CREDENCIALES, Content-Type: application/xwww-form-urlencoded;charset=UTF-8' --data
"grant_type=client_credentials" verbose k
{"token_type":"bearer","access_token":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAA
AAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}
Ejemplo (curl):
curl --request 'GET'
'https://api.twitter.com/1.1/statuses/user_timeline.json?count=100
&screen_name=twitterapi' --header 'Authorization: Bearer
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' k
https://dev.twitter.com/docs/auth/application-only-auth
https://dev.twitter.com/oauth/3-legged
OAuth y el mundo
13
http://en.wikipedia.org/wiki/OAuth#List_of_OAuth_service_providers
en un estndar de facto
Flask
14
INTRODUCCIN
GE T, POST, PUT, DE LE TE
CORS
SUBIDA DE ARCH IVOS
Flask
15
Aprenderemos a:
Implementar operaciones CRUD (GET, POST, PUT, DELETE)
http://blog.miguelgrinberg.com/post/designing-a-restful-api-with-python-and-flask
http://mortoray.com/2014/04/09/allowing-unlimited-access-with-cors/
http://flask.pocoo.org/docs/patterns/fileuploads/
#!flask/bin/python
from flask import Flask
app = Flask(__name__)
1) Instanciamos una
aplicacin de Flask
@app.route('/')
def index():
return "Hello, World!"
2) Definimos un servicio
if __name__ == '__main__':
app.run(debug = True)
3) Ejecutamos la aplicacin
1) Permisos de ejecucin
$ chmod a+x app.py
2) Lanzamos la aplicacin
$ ./app.py
* Running on http://127.0.0.1:5000/
* Restarting with reloader
cualquier mensaje adicional (peticiones
aceptadas, errores, etc.) aparecer aqu
Testeo:
Navegador web: http://localhost:5000
Consola:
curl i http://localhost:5000
incluye la cabecera HTTP en la
salida, a modo informativo
3) Tipo de peticin
Podemos usar variables globales (la
implementacin de REST en Flask es
con estado)
3) request.args es un
diccionario con todos los
parmetros pasados a la
URL
Flask: POST
21
1) Soporte para peticiones
2) tipo de mtodo: POST
Flask: POST
22
Opciones de curl:
-H para aadir cabecera HTTP de la peticin (p. ej. el
contenido es de tipo aplicacin en formato JSON)
http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
Flask: PUT
23
Flask: DELETE
24
CORS
25
CORS: Ejemplo
26
Origin: http://www.socialBooks.com
Access-Control-Allow-Origin: http://www.socialBooks.com
Access-Control-Allow-Origin: *
CORS y Flask
27
Subida de archivos
28
filename = "../../../../home/username/.bashrc
Si acierta con el nmero de ../ puede estar sobreescribiendo
nuestro profile!
Barras de progreso
33
en distintos lenguajes
Resumen
34
OAuth es un mtodo de
Consiste en un intercambio
Referencias
35
https://aaronparecki.com/2012/07/29/2/oauth2-simplified
https://dev.twitter.com/oauth
http://hueniverse.com/2012/07/26/oauth-2-0-and-the-road-to-hell/
http://flask.pocoo.org/
Otros
36