ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity...

80
ODCTour18 LAD #RESTSecurity @otaviojava @tomitribe Stateless Microservice Security via JWT and MicroProfile Otávio Santana @otaviojava Tomitribe

Transcript of ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity...

Page 1: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

OD

CTo

ur18

LA

D

#RESTSecurity @otaviojava @tomitribe

Stateless Microservice Security via JWT and MicroProfile

∙ Otávio Santana @otaviojava∙ Tomitribe

Page 2: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D Otávio Santana∙Senior Software Engineer at Tomitribe

∙Java Champion & Developer Champion

∙Duke’s Choice Award 2016 y 2017

∙Apache and Eclipse Commiter

Page 3: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

“Lo mejor de los standares es que terminas teniendo muchas opciones por escoger.”

- Andrew S. Tanenbaum

Page 4: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

“Lo mejor de los standares es que terminas teniendo muchas opciones por escogerThe nice

thing about standards is you have so many to choose from.”

- Andrew S. Tanenbaum

Page 5: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DOpciones de seguridad para Microservicios● Más allá de Basic Auth

● Teoría de OAuth 2.0

● Introducción a JWT

● Eclipse Microprofile

● Demo

Page 6: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DLínea Base

1000 usuariosx 3 TPS 4 saltos

3000 TPSfrontend

12000 TPS

backend

Page 7: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Basic Auth(y sus problemas)

Page 8: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DMensaje en Basic AuthPOST /painter/color/object HTTP/1.1Host: localhost:8443Authorization: Basic c25vb3B5OnBhc3M=User-Agent: curl/7.43.0Accept: */*Content-Type: application/jsonContent-Length: 45

{"color":{"b":255,"g":0,"name":"blue","r":0}}

Page 9: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DBasic Auth

Password Sent3000 TPS(HTTP+SSL)

username+passwordBase64 (no auth)

(LDAP)

12000 TPS(HTTP)

3000 TPS

Page 10: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DBasic Auth

Password Sent3000 TPS(HTTP+SSL)

username+passwordBase64

username+passwordBase64

15000 TPS(LDAP)

Password Sent12000 TPS(HTTP)

Page 11: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DBasic Auth

Password Sent3000 TPS(HTTP+SSL)

username+passwordBase64

Lista Blanca de IP

3000 TPS(LDAP)

12000 TPS(HTTP)

Page 12: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

“Dame toda la información delsalario de José.” “No se quien

eres,…

pero por supuesto!”

Page 13: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DAtaque de fuerza bruta: Basic Auth

Passwordválidos3000 TPS

(HTTP+SSL)Lista

Blanca IP

9000 TPS(LDAP)

12000 TPS(HTTP)

Passwordsinválidos6000 TPS

(HTTP+SSL)

Page 14: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

OAuth 2.0(y sus problemas)

Page 15: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Page 16: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Page 17: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Page 18: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Page 19: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DOAuth 2 - Password Grant

(LDAP)

(Repositorio de Token)

Verificación de

Password

Generación deToken

Post /oauth2/tokenHost: api.superbliz.ioUser-Agent: curl/7.43.0Accept: */*Content-Type: application/x-www-form-urlencodedContent-Length: 54grand_type=password&username=snoopy&password=woodstock

Page 20: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DOAuth 2 - Password Grant

(LDAP)Verificación

dePassword

Generación deToken

(Repositorio de Token)

Post /oauth2/tokenHost: api.superbliz.ioUser-Agent: curl/7.43.0Accept: */*Content-Type: application/x-www-form-urlencodedContent-Length: 54grand_type=password&username=snoopy&password=woodstock

Page 21: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DMensaje OAuth 2.0

POST /painter/color/object HTTP/1.1Host: api.superbiz.ioAuthorization: Bearer 2YotnFZFEjr1zCsicMWpAAUser-Agent: curl/7.43.0Accept: */*Content-Type: application/jsonContent-Length: 45

{"color":{"r":0,"g":0,"b":255,"name":"blue"}}

Page 22: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DMensaje OAuth 2.0

POST /painter/color/palette HTTP/1.1Host: api.superbiz.ioAuthorization: Bearer 2YotnFZFEjr1zCsicMWpAAUser-Agent: curl/7.43.0Accept: */*Content-Type: application/jsonContent-Length: 45

{"color":{"r":0,"g":255,"b":0,"name":"green"}}

Page 23: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DMensaje OAuth 2.0

POST /painter/color/select HTTP/1.1Host: api.superbiz.ioAuthorization: Bearer 2YotnFZFEjr1zCsicMWpAAUser-Agent: curl/7.43.0Accept: */*Content-Type: application/jsonContent-Length: 44

{"color":{"r":255,"g":0,"b":0,"name":"red"}}

Page 24: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DMensaje OAuth 2.0

POST /painter/color/fill HTTP/1.1Host: api.superbiz.ioAuthorization: Bearer 2YotnFZFEjr1zCsicMWpAAUser-Agent: curl/7.43.0Accept: */*Content-Type: application/jsonContent-Length: 49

{"color":{"r":0,"g":255,"b":255,"name":"yellow"}}

Page 25: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DMensaje OAuth 2.0

POST /painter/color/stroke HTTP/1.1Host: api.superbiz.ioAuthorization: Bearer 2YotnFZFEjr1zCsicMWpAAUser-Agent: curl/7.43.0Accept: */*Content-Type: application/jsonContent-Length: 49

{"color":{"r":255,"g":200,"b":255,"name":"orange"}}

Page 26: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Page 27: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DOAuth 2 - Refresh Grant

(LDAP)

VerificaciónPassword

GeneraciónToken

(Repositorio de Token)

Post /oauth2/tokenHost: api.superbliz.ioUser-Agent: curl/7.43.0Accept: */*Content-Type: application/x-www-form-urlencodedContent-Length: 54grand_type=password&username=snoopy&password=woodstock

Page 28: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DOAuth 2 - Refresh Grant

(LDAP)

VerificaciónPassword

GeneraciónToken

(Repositorio de Token)

Post /oauth2/tokenHost: api.superbliz.ioUser-Agent: curl/7.43.0Accept: */*Content-Type: application/x-www-form-urlencodedContent-Length: 54grand_type=password&username=snoopy&password=woodstock

Page 29: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DPar anterior

∙ Access Token 2YotnFZFEjr1zCsicMWpAA

∙ Refresh Token tGzv3JOkF0XG5Qx2TlKWIA

Nuevo Par

∙ Access Token

6Fe4jd7TmdE5yW2q0y6W2w

∙ Refresh Token hyT5rw1QNh5Ttg2hdtR54e

Page 30: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DMensaje OAuth 2.0

POST /painter/color/palette HTTP/1.1Host: api.superbiz.ioAuthorization: Bearer 6Fe4jd7TmdE5yW2q0y6W2wUser-Agent: curl/7.43.0Accept: */*Content-Type: application/jsonContent-Length: 46

{"color":{"r":0,"g":255,"b":0,"name":"green"}}

Page 31: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DMensaje OAuth 2.0

POST /painter/color/select HTTP/1.1Host: api.superbiz.ioAuthorization: Bearer 6Fe4jd7TmdE5yW2q0y6W2wUser-Agent: curl/7.43.0Accept: */*Content-Type: application/jsonContent-Length: 44

{"color":{"r":255,"g":0,"b":0,"name":"red"}}

Page 32: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DMensaje OAuth 2.0

POST /painter/color/fill HTTP/1.1Host: api.superbiz.ioAuthorization: Bearer 6Fe4jd7TmdE5yW2q0y6W2wUser-Agent: curl/7.43.0Accept: */*Content-Type: application/jsonContent-Length: 49

{"color":{"r":0,"g":255,"b":255,"name":"yellow"}}

Page 33: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

¿Qué hemos logrado?

Page 34: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Ahora tenemos más passwords(al menos tus dispositivos los tienen)

Page 35: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DTerminología de nuevo…

∙ Password Grant???

∙ Logging in

∙ Token?

∙ Un password ligeramente ofuscado

∙ Equivalente a un HTTP session ID mejorado levemente

Page 36: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DOAuth 2

Request enviados(Authorization: Bearer …)

3000 TPS(HTTP+SSL)

3000 TPS(Verificacione

sde tokens)

Password enviados (post oauth2/token …)

1000/daily(HTTP+SSL)

OAuth 2

(LDAP)

4 saldos12000 TPS

backend

Page 37: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Page 38: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

“Quién es 6Fe4jd7TmdE5yW2q0y6W2w

???????” “No tengo idea.Pregúntale al servidor de

tokens.”

Page 39: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DOAuth 2

Tokens enviados3000 TPS(HTTP+SSL)

3000 TPS(verificación

token)

Password Envidados

1000/daily(HTTP+SSL)

OAuth 2

(LDAP)

12000 TPS

(Verificación token)

8 Saldos

24000 TPSbackend

Page 40: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DOAuth 2

3000 TPS(Verificación

token)

(LDAP)

12000 TPS

(Verificacióntoken)

55% del tráfico total

Tokens enviados3000 TPS(HTTP+SSL)

Password Envidados

1000/daily(HTTP+SSL)

OAuth 2

8 Saldos

24000 TPSbackend

Page 41: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DOAuth 2

Puntero Puntero

Estado

Page 42: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Access TokenPuntero de Acceso?

Llave primaria de Acceso?

Page 43: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

OAuth 2.0Algoritmo de intercambio de

passwords de alta frecuencia?

Page 44: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D OAuth 2.0+

JSon Web Tokens (JWT)

Page 45: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DJSon Web Token

∙ Pronunciado “YOT”∙ JSON map con data de usuario∙ Códificado Base64∙ Firmado digitalmente (RSA-SHA256, HMAC-SHA512, etc)∙ Mecanismo de expiración

Page 46: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DPreviamente un Access Token

∙ 6Fe4jd7TmdE5yW2q0y6W2w

Page 47: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DAccess Token ahora (JWT)

∙ eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbi10eXBlIjoiYWNjZXNzLXRva2VuIiwidXNlcm5hbWUiOiJzbm9vcHkiLCJhbmltYWwiOiJiZWFnbGUiLCJpc3MiOiJodHRwczovL2RlbW8uc3VwZXJiaXouY29tL29hdXRoMi90b2tlbiIsInNjb3BlcyI6WyJ0d2l0dGVyIiwibWFucy1iZXN0LWZyaWVuZCJdLCJleHAiOjE0NzQyODA5NjMsImlhdCI6MTQ3NDI3OTE2MywianRpIjoiNjY4ODFiMDY4YjI0OWFkOSJ9.DTfSdMzIIsC0j8z3icRdYO1GaMGl6j1I_2DBjiiHW9vmDz8OAw8Jh8DpO32fv0vICc0hb4F0QCD3KQnv8GVM73kSYaOEUwlW0k1TaElxc43_Ocxm1F5IUNZvzlLJ_ksFXGDL_cuadhVDaiqmhct098ocefuv08TdzRxqYoEqYNo

Page 48: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DNuevo Access Token∙ header (JSON > Base64 URL Encoded)

∙ Describe como la firma (signature) del token puede ser verificada

∙ payload (JSON > Base64 URL Encoded)∙ Json map de información que desees incluir

∙ Campo estándar como el de Expiración

∙ signature (Binary > Base64 URL Encoded)∙ La firma digital

∙ Hecha exclusivamente por el endpoint: /oauth2/token

∙ Si es RSA puede ser verificado por cualquier persona

Page 49: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D∙ { "alg": “RS256", "typ": “JWT" }∙ {

"token-type": "access-token", "username": "snoopy", "animal": "beagle", "iss": "https://demo.superbiz.com/oauth2/token", "scopes": [ “twitter”, "mans-best-friend" ], "exp": 1474280963, "iat": 1474279163, "jti": "66881b068b249ad9"}

∙ DTfSdMzIIsC0j8z3icRdYO1GaMGl6j1I_2DBjiiHW9vmDz8OAw8Jh8DpO32fv0vICc0hb4F0QCD3KQnv8GVM73kSYaOEUwlW0k1TaElxc43_Ocxm1F5IUNZvzlLJ_ksFXGDL_cuadhVDaiqmhct098ocefuv08TdzRxqYoEqYNo

Page 50: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Page 51: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Page 52: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Ligero pero con alto impacto en la arquitectura

Page 53: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

¿Qué tenemos hasta el momento?

(repaso)

Page 54: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

(LDAP) Data completadel usuario desde

ldap

Page 55: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

(LDAP)

Generación deAccess Token

(pointer)

Page 56: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

(LDAP)

Ambos seinsertan en

BD

Page 57: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

(LDAP)

Envío del Access Token (pointer) hacia el cliente

Page 58: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D Resultado final

cliente permanece con el Pointer Server almacena State

Page 59: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

¿Qué podemos hacer ahora?(hola JWT!)

Page 60: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

(LDAP) Data completadel usuario desde

ldap

Page 61: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

(LDAP)

La data se representaen JSON

Page 62: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

(LDAP)

JSON es firmadoRSA-SHA 256

Page 63: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

(LDAP)

Se inserta solamente el

pointer en DB

(para revocaciones)

Page 64: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

(LDAP)

Envío del Access Token (estado) hacia el cliente

Page 65: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Servidor almacena el Puntero

Cliente permanece con el Estado

Resultado obtenido

Page 66: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Page 67: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DOAuth 2 - Password Grant

(LDAP)

(RepositorioToken ID)

VerificaPassword

GeneraToken

Firmado (Signed)

Post /oauth2/tokenHost: api.superbliz.ioUser-Agent: curl/7.43.0Accept: */*Content-Type: application/x-www-form-urlencodedContent-Length: 54grand_type=password&username=snoopy&password=woodstock

Page 68: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DOAuth 2 - Password Grant

(LDAP)

VerificaPassword

(RepositorioToken ID)

GeneraToken

Firmado (Signed)

Page 69: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DMensaje OAuth 2.0 con JWT

POST /painter/color/palette HTTP/1.1Host: api.superbiz.ioAuthorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbi10eXBlIjoiYWNjZXNzLXRva2VuIiwidXNlcm5hbWUiOiJzbm9vcHkiLCJhbmltYWwiOiJiZWFnbGUiLCJpc3MiOiJodHRwczovL2RlbW8uc3VwZXJiaXouY29tL29hdXRoMi90b2tlbiIsInNjb3BlcyI6WyJ0d2l0dGVyIiwibWFucy1iZXN0LWZyaWVuZCJdLCJleHAiOjE0NzQyODA5NjMsImlhdCI6MTQ3NDI3OTE2MywianRpIjoiNjY4ODFiMDY4YjI0OWFkOSJ9.DTfSdMzIIsC0j8z3icRdYO1GaMGl6j1I_2DBjiiHW9vmDz8OAw8Jh8DpO32fv0vICc0hb4F0QCD3KQnv8GVM73kSYaOEUwlW0k1TaElxc43_Ocxm1F5IUNZvzlLJ_ksFXGDL_cuadhVDaiqmhct098ocefuv08TdzRxqYoEqYNo

User-Agent: curl/7.43.0Accept: */*Content-Type: application/jsonContent-Length: 46{"color":{"b":0,"g":255,"r":0,"name":"green"}}

Page 70: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DOAuth 2 + JWT

Tokens enviados

3000 TPS(HTTP+SSL)

0.55 TPS(Verificaciones refresh token)

OAuth 2

(LDAP)

4 saltos12000 TPS

backend

3000 TPS(verifica firma)

12000 TPS(verifica firma)

Password enviados (post oauth2/token …)

1000/daily(HTTP+SSL)

Page 71: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

“No!”

“Dame toda la información delsalario de José.”

Page 72: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

“Claro!”

“Dame toda la información delsalario de José.”

Page 73: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DOAuth 2 + JWT

Envío deTokens válidos3000 TPS(HTTP+SSL)

IPwhitelisting

0.55 TPS(verifica refresh token)

Password enviados1000/daily(HTTP+SSL)

(LDAP)

4 saltos12000 TPS

backend

9000 TPS(verifica firma)

12000 TPS(verifica firma)

Token inválidos6000 TPS(HTTP+SSL)

Page 74: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

https://connect2id.com/products/nimbus-jose-jwt

Librería JWT

https://github.com/jwtk/jjwthttps://github.com/auth0/java-jwt

Page 75: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Eclipse MicroProfile

Page 76: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DMicroProfile

∙ Comunidad Open-Source de la fundación Eclipse∙ Enfocada en Microservicios bajo JavaEE∙ Generadora de: Specificaciones, API y TCK.∙ Implementado por diferentes entidades

http://microprofile.io/

Page 77: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DMicroProfile JWT

MicroProfile 2.0

JAX-RS 2.1JSON-P 1.1CDI 2.0

Config 1.3

FaultTolerance

1.1

JWTRBAC 1.1

HealthCheck 1.0Metrics 1.1

Open Tracing 1.1

Open API 1.0

Rest Client 1.1

JSON-B 1.0

JWTRBAC 1.1

https://microprofile.io/project/eclipse/microprofile-jwt-auth/

Standares de Seguridad● OAuth 2.0● OpenID Connect● JSON Web Tokens

(JWT)

Tecnologías Java● JAX-RS ● CDI ● JSON-P.

Page 78: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

Demo

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

D

Page 79: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

#RESTSecurity @otaviojava @tomitribe

OD

CTo

ur18

LA

DMoviefun Diagrama de Despliegue

Gateway

Page 80: ODCTour18 LAD Stateless Microservice Security via JWT and ......JSon Web Tokens (JWT) #RESTSecurity @otaviojava @tomitribe ODCTour18 LAD JSon Web Token

Gracias