SlideShare a Scribd company logo
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Stateless Microservice Security via
JWT, TomEE and MicroProfile
Jean-Louis Monteiro
Tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Why am I here today?
Microservices architecture case
Security opDons
OAuth2 with JWT
Demo with MP-JWT and TomEE
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Microservices
(SOA with a sexy name)
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
TradiDonal system
Component A
Component B
Component CComponent D
System
(Monolithic)
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
… and its tradiDonal security
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Challenges with security
• Who is the caller?
• What can he do?
• How to propagate the security context?
“If you can’t build monolith correctly, why do you think putting network in the
middle will help?” - @simonbrown
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Microservices security opDons
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OpDons
• Basic Auth
• OAuth2
• OpenID Connect
• JWT - Facebook / Google way
• HTTP Signatures - Amazon way
• « In-house » soluFons
• And many more …
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
“The nice thing about standards is
you have so many to choose from.”
- Andrew S. Tanenbaum
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Baseline Architecture
1000 users
x 3 TPS
4 hops
3000 TPS
frontend
12000 TPS
backend
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Basic Auth
(and its problems)
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Basic Auth Message
POST /painter/color/object HTTP/1.1
Host: localhost:8443
Authorization: Basic c25vb3B5OnBhc3M=
User-Agent: curl/7.43.0
Accept: */*
Content-Type: application/json
Content-Length: 45
{"color":{"b":255,"g":0,"name":"blue","r":0}}
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Basic Auth
Password Sent
3000 TPS
(HTTP+SSL)
username+password
Base64
(no auth)
3000 TPS
(LDAP)
12000 TPS
(HTTP)
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Basic Auth
Password Sent
3000 TPS
(HTTP+SSL)
username+password
Base64
username+password
Base64
15000 TPS
(LDAP)
Password Sent
12000 TPS
(HTTP)
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Basic Auth - AQacks
Valid
Password Sent
3000 TPS
(HTTP+SSL) No auth
9000 TPS
(LDAP)
12000 TPS
(HTTP)
Invalid
Password Sent
6000 TPS
(HTTP+SSL)
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2.0
(and its problems)
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
The theory behind it
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Based on tokens
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Based on tokens
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Based on tokens
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2 - Password Grant
(LDAP)
(Token Store)
POST /oauth2/token
Host: api.superbiz.io
User-Agent: curl/7.43.0
Accept: */*
Content-Type: application/x-www-form-urlencoded
Content-Length: 54
grant_type=password&username=snoopy&password=woodstock
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
}
Verify
Password
Generate
Token
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2.0 Message
POST /painter/color/object HTTP/1.1
Host: api.superbiz.io
Authorization: Bearer 2YotnFZFEjr1zCsicMWpAA
User-Agent: curl/7.43.0
Accept: */*
Content-Type: application/json
Content-Length: 45
{"color":{"r":0,"g":0,"b":255,"name":"blue"}}
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2.0 Message
POST /painter/color/palette HTTP/1.1
Host: api.superbiz.io
Authorization: Bearer 2YotnFZFEjr1zCsicMWpAA
User-Agent: curl/7.43.0
Accept: */*
Content-Type: application/json
Content-Length: 45
{"color":{"r":0,"g":255,"b":0,"name":"green"}}
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2.0 Message
POST /painter/color/select HTTP/1.1
Host: api.superbiz.io
Authorization: Bearer 2YotnFZFEjr1zCsicMWpAA
User-Agent: curl/7.43.0
Accept: */*
Content-Type: application/json
Content-Length: 44
{"color":{"r":255,"g":0,"b":0,"name":"red"}}
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2.0 Message
POST /painter/color/fill HTTP/1.1
Host: api.superbiz.io
Authorization: Bearer 2YotnFZFEjr1zCsicMWpAA
User-Agent: curl/7.43.0
Accept: */*
Content-Type: application/json
Content-Length: 49
{"color":{"r":0,"g":255,"b":255,"name":"yellow"}}
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2.0 Message
POST /painter/color/stroke HTTP/1.1
Host: api.superbiz.io
Authorization: Bearer 2YotnFZFEjr1zCsicMWpAA
User-Agent: curl/7.43.0
Accept: */*
Content-Type: application/json
Content-Length: 49
{"color":{"r":255,"g":200,"b":255,"name":"orange"}}
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
401
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2 - Refresh Grant
(LDAP)
(Token Store)
Verify and
Generate
Token
POST /oauth2/token
Host: api.superbiz.io
User-Agent: curl/7.43.0
Accept: */*
Content-Type: application/x-www-form-urlencoded
Content-Length: 54
grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"6Fe4jd7TmdE5yW2q0y6W2w",
"expires_in":3600,
"refresh_token":"hyT5rw1QNh5Ttg2hdtR54e",
}
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Old pair
• Access Token 2YotnFZFEjr1zCsicMWpAA
• Refresh Token tGzv3JOkF0XG5Qx2TlKWIA
New pair
• Access Token 6Fe4jd7TmdE5yW2q0y6W2w
• Refresh Token hyT5rw1QNh5Ttg2hdtR54e
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2.0 Message
POST /painter/color/palette HTTP/1.1
Host: api.superbiz.io
Authorization: Bearer 6Fe4jd7TmdE5yW2q0y6W2w
User-Agent: curl/7.43.0
Accept: */*
Content-Type: application/json
Content-Length: 46
{"color":{"r":0,"g":255,"b":0,"name":"green"}}
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2.0 Message
POST /painter/color/select HTTP/1.1
Host: api.superbiz.io
Authorization: Bearer 6Fe4jd7TmdE5yW2q0y6W2w
User-Agent: curl/7.43.0
Accept: */*
Content-Type: application/json
Content-Length: 44
{"color":{"r":255,"g":0,"b":0,"name":"red"}}
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2.0 Message
POST /painter/color/fill HTTP/1.1
Host: api.superbiz.io
Authorization: Bearer 6Fe4jd7TmdE5yW2q0y6W2w
User-Agent: curl/7.43.0
Accept: */*
Content-Type: application/json
Content-Length: 49
{"color":{"r":0,"g":255,"b":255,"name":"yellow"}}
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
What have we achieved?
• Avoid high rate username + password transit on wire
• Replaced by a blind « token » referencing a state on the server
side
• Generate many « short live » passwords stored on devices
• Create a new …. HTTP Session architecture
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
New terms, really?
• Password Grant?
• Logging in
• Token?
• Slightly less crappy password
• Equally crappy HTTP Session ID
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2
Tokens Sent
3000 TPS
(HTTP+SSL)
No auth
3000 TPS
(token checks)
Password Sent
1000/daily
(HTTP+SSL)
OAuth 2
(LDAP)
4 hops
12000 TPS
backend
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2
Tokens Sent
3000 TPS
(HTTP+SSL)
3000 TPS
(token checks)
Password Sent
1000/daily
(HTTP+SSL)
OAuth 2
(LDAP)
12000 TPS
(token checks)
backend
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2
Tokens Sent
3000 TPS
(HTTP+SSL)
3000 TPS
(token checks)
Password Sent
1000/daily
(HTTP+SSL)
OAuth 2
(LDAP)
12000 TPS
(token checks)
backend
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2
Tokens Sent
3000 TPS
(HTTP+SSL)
0 TPS
(token checks)
Password Sent
1000/daily
(HTTP+SSL)
OAuth 2
(LDAP)
0 TPS
(token checks)
0 hops
0 TPS
backend
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2.0
+
JSON Web Tokens (JWT)
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
JSON Web Token
• Pronounced “JOT” (No idea why :-) )
• SAML like but less verbose
• Fancy JSON map
• Base64 URL Encoded
• Digitally Signed (RSA-SHA256, HMAC-SHA512, etc)
• Possibly encrypted
• Built-in expiraFon
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Access Token Previously
• 6Fe4jd7TmdE5yW2q0y6W2w
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Access Token Now
• eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbi
10eXBlIjoiYWNjZXNzLXRva2VuIiwidXNlcm5hbWUiOiJzb
m9vcHkiLCJhbmltYWwiOiJiZWFnbGUiLCJpc3MiOiJodHRw
czovL2RlbW8uc3VwZXJiaXouY29tL29hdXRoMi90b2tlbiI
sInNjb3BlcyI6WyJ0d2l0dGVyIiwibWFucy1iZXN0LWZyaW
VuZCJdLCJleHAiOjE0NzQyODA5NjMsImlhdCI6MTQ3NDI3O
TE2MywianRpIjoiNjY4ODFiMDY4YjI0OWFkOSJ9.DTfSdMz
IIsC0j8z3icRdYO1GaMGl6j1I_2DBjiiHW9vmDz8OAw8Jh8
DpO32fv0vICc0hb4F0QCD3KQnv8GVM73kSYaOEUwlW0k1Ta
Elxc43_Ocxm1F5IUNZvzlLJ_ksFXGDL_cuadhVDaiqmhct0
98ocefuv08TdzRxqYoEqYNo
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Access Token Now
• { "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_2DBjiiHW9vmDz8OAw8Jh8DpO32fv0vICc0hb4F0QCD3
KQnv8GVM73kSYaOEUwlW0k1TaElxc43_Ocxm1F5IUNZvzlLJ_ksFXGDL_cuadhVDaiqmhct098oc
efuv08TdzRxqYoEqYNo
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Access Token Now
• Header (JSON > Base64 URL Encoded)
• Describes how the token signature can be checked
• Payload (JSON > Base64 URL Encoded)
• Basically a map of whatever you want to put in it
• Some standard entries (called claims) such as expiraFon
• Signature (Binary > Base64 URL Encoded
• The actual digital signature
• Made exclusively by the /oauth2/token endpoint
• If RSA, can be checked by anyone
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Subtle But High Impact
Architectural Change
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
What we had
(quick recap)
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Results
Client Holds Pointer Server Holds State
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
What we can do now
(Hello JWT!)
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
(LDAP)
Pull User Info
From IDP
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
(LDAP)
Format the data
as JSON
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
(LDAP)
RSA-SHA 256
sign JSON private
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
(LDAP)
Insert only
pointer
into DB
(for revoca@on)
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
(LDAP)
Send Access Token (state)
to client
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Client Holds State Server Holds Pointer
Desired
Results
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2 - Password Grant
(LDAP)
(Token ID Store)
POST /oauth2/token
Host: api.superbiz.io
User-Agent: curl/7.43.0
Accept: */*
Content-Type: application/x-www-form-urlencoded
Content-Length: 54
grant_type=password&username=snoopy&password=woodstock
Verify
Password
Generate
Signed
Token
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.
eyJ0b2tlbi10eXBlIjoiYWNjZXNzLXRva2VuIiwidXNlcm5hb
WUiOiJzbm9vcHkiLCJhbmltYWwiOiJiZWFnbGUiLCJpc3M
iOiJodHRwczovL2RlbW8uc3VwZXJiaXouY29tL29hdXRoM
i90b2tlbiIsInNjb3BlcyI6WyJ0d2l0dGVyIiwibWFucy1iZXN0
LWZyaWVuZCJdLCJleHAiOjE0NzQyODA5NjMsImlhdCI6M
TQ3NDI3OTE2MywianRpIjoiNjY4ODFiMDY4YjI0OWFkOSJ
9.DTfSdMzIIsC0j8z3icRdYO1GaMGl6j1I_2DBjiiHW9vmDz8
OAw8Jh8DpO32fv0vICc0hb4F0QCD3KQnv8GVM73kSYaO
EUwlW0k1TaElxc43_Ocxm1F5IUNZvzlLJ_ksFXGDL_cuadh
VDaiqmhct098ocefuv08TdzRxqYoEqYNo",
"expires_in":3600,
"refresh_token":"eyJhbGctGzv3JOkF0XG5Qx2TlKWIAkF0X.
eyJ0b2tlbi10eXBlIjoiYWNjZXNzLXRva2VuIiwidXNlcm5hb
WUiOiJzbm9vcHkiLCJhbmltYWwiOiJiZWFnbGUiLCJpc3M
iOiJodHRwczovL",
}
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2.0 Message with JWT
POST /painter/color/palene HTTP/1.1

Host: api.superbiz.io

AuthorizaDon: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbi10eXBlIjoiYWNjZXNzLXR
va2VuIiwidXNlcm5hbWUiOiJzbm9vcHkiLCJhbmltYWwiOiJiZWFnbGUiLCJpc3MiOiJodHRwczovL2RlbW8uc3VwZXJ
iaXouY29tL29hdXRoMi90b2tlbiIsInNjb3BlcyI6WyJ0d2l0dGVyIiwibWFucy1iZXN0LWZyaWVuZCJdLCJleHAiOjE0NzQy
ODA5NjMsImlhdCI6MTQ3NDI3OTE2MywianRpIjoiNjY4ODFiMDY4YjI0OWFkOSJ9.DTfSdMzIIsC0j8z3icRdYO1GaMGl
6j1I_2DBjiiHW9vmDz8OAw8Jh8DpO32fv0vICc0hb4F0QCD3KQnv8GVM73kSYaOEUwlW0k1TaElxc43_Ocxm1F5IUNZ
vzlLJ_ksFXGDL_cuadhVDaiqmhct098ocefuv08TdzRxqYoEqYNo
User-Agent: curl/7.43.0

Accept: */*

Content-Type: applicaFon/json

Content-Length: 46



{"color":{"b":0,"g":255,"r":0,"name":"green"}}
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2 + JWT
Tokens Sent
3000 TPS
(HTTP+SSL)
0.27 TPS
(refresh token checks)
Password Sent
1000/daily
(HTTP+SSL)
OAuth 2
(LDAP)
4 hops
12000 TPS
backend
3000 TPS
(signature verificaFon)
12000 TPS
(signature verificaFon)(private key)
(public key)
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
OAuth 2 + JWT
Valid
Tokens Sent
3000 TPS
(HTTP+SSL)
0.27 TPS
(refresh token checks)
Password Sent
1000/daily
(HTTP+SSL)
(LDAP)
4 hops
12000 TPS
backend
9000 TPS
(signature verificaFon)
12000 TPS
(signature verificaFon)
Invalid
Tokens Sent
6000 TPS
(HTTP+SSL)
(private key)
(public key)
DublinJUG
#RESTSecurity @dblevins @tomitribe#DubJug @JLouisMonteiro @tomitribe
Microprofile
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
What is it?
• hnps://microprofile.io/
• Enterprise Java for Microservices
• Open Source
• Hosted at Eclipse FoundaFon
• IniFal version 1.0 focused on CDI, JAX-RS and JSON-P
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Where are we at?
• Currently at version 2.2
• ConfiguraFon, Fault Tolerance, JWT, Health Checks, Metrics,
Open Tracing, Open API and REST Client
• 3 to 4 releases per year
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Who is involved?
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Why?
• Increasing number of specificaFons in Java EE
• Need for a smaller subset to build micro services
• Need for quick changes (Fme to market)
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
What implementaDons?
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Microprofile JWT
• Most current version 1.1
• Role Based Access Control
• Very lightweight and interoperable way to propagate idenFFes
• Keys (JWKS)
• Standard configuraFon (Microprofile Config)
@dblevins @tomitribe
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Goals
• Extract and verify the token
• IdenFfy the caller
• Enforce authorizaFon policies
DublinJUG
#RESTSecurity @dblevins @tomitribe#DubJug @JLouisMonteiro @tomitribe
Demo
DublinJUG
#DubJug @JLouisMonteiro @tomitribe
Thank You!
https://tribestream.io/
http://tribestream.io
http://tomitribe.io
http://microprofile.io

More Related Content

PDF
2019 ITkonekt Stateless REST Security with MicroProfile JWT
PDF
2018 SDJUG Deconstructing and Evolving REST Security
PDF
2018 ecuador deconstruyendo y evolucionando la seguridad en servicios rest
PDF
2019 JJUG CCC Stateless Microservice Security with MicroProfile JWT
PDF
2016 JavaOne Deconstructing REST Security
PDF
2017 dev nexus_deconstructing_rest_security
PDF
Stateless Microservice Security via JWT and MicroProfile - ES
PDF
Stateless Microservice Security via JWT and MicroProfile - Guatemala
2019 ITkonekt Stateless REST Security with MicroProfile JWT
2018 SDJUG Deconstructing and Evolving REST Security
2018 ecuador deconstruyendo y evolucionando la seguridad en servicios rest
2019 JJUG CCC Stateless Microservice Security with MicroProfile JWT
2016 JavaOne Deconstructing REST Security
2017 dev nexus_deconstructing_rest_security
Stateless Microservice Security via JWT and MicroProfile - ES
Stateless Microservice Security via JWT and MicroProfile - Guatemala

What's hot (10)

PDF
Stateless Microservice Security via JWT and MicroProfile - Mexico
PDF
2017 Devoxx MA Deconstructing and Evolving REST Security
PDF
2018 colombia deconstruyendo y evolucionando la seguridad en servicios rest
PDF
Seguridad en microservicios via micro profile jwt
PDF
2018 Madrid JUG Deconstructing REST Security
PDF
HTTP cookie hijacking in the wild: security and privacy implications
PDF
Who is Afraid of Cookies?
PDF
Deconstructing and Evolving REST Security
PDF
OAuth and why you should use it
PDF
Basics of GnuPG (gpg) command in linux
Stateless Microservice Security via JWT and MicroProfile - Mexico
2017 Devoxx MA Deconstructing and Evolving REST Security
2018 colombia deconstruyendo y evolucionando la seguridad en servicios rest
Seguridad en microservicios via micro profile jwt
2018 Madrid JUG Deconstructing REST Security
HTTP cookie hijacking in the wild: security and privacy implications
Who is Afraid of Cookies?
Deconstructing and Evolving REST Security
OAuth and why you should use it
Basics of GnuPG (gpg) command in linux
Ad

Similar to Dublin JUG Stateless Microservice Security via JWT, TomEE and MicroProfile (20)

PDF
Deconstructing and Evolving REST security
PDF
2018 Denver JUG Deconstructing and Evolving REST Security
PDF
I Don't Care About Security (And Neither Should You)
PDF
Stateless authentication for microservices applications - JavaLand 2015
PDF
APIdays Paris 2019 - Workshop: OAuth by Example by Andy March, Okta
PDF
muCon 2016: Authentication in Microservice Systems By David Borsos
PDF
Authentication in microservice systems
PDF
2018 IterateConf Deconstructing and Evolving REST Security
PDF
2018 Boulder JUG Deconstructing and Evolving REST Security
PDF
I Don't Care About Security (And Neither Should You)
PPTX
An Authentication and Authorization Architecture for a Microservices World
PDF
Secured REST Microservices with Spring Cloud
PPTX
Microservices Manchester: Authentication in Microservice Systems by David Borsos
PDF
JDD2015: Security in the era of modern applications and services - Bolesław D...
PPT
Open Id, O Auth And Webservices
PDF
AllTheTalks.Online 2020: "Basics of OAuth 2.0 and OpenID Connect"
PDF
InterCon 2016 - Segurança de identidade digital levando em consideração uma a...
PDF
iMasters Intercon 2016 - Identity within Microservices
PDF
Stateless authentication for microservices - GR8Conf 2015
PDF
Stateless token-based authentication for pure front-end applications
Deconstructing and Evolving REST security
2018 Denver JUG Deconstructing and Evolving REST Security
I Don't Care About Security (And Neither Should You)
Stateless authentication for microservices applications - JavaLand 2015
APIdays Paris 2019 - Workshop: OAuth by Example by Andy March, Okta
muCon 2016: Authentication in Microservice Systems By David Borsos
Authentication in microservice systems
2018 IterateConf Deconstructing and Evolving REST Security
2018 Boulder JUG Deconstructing and Evolving REST Security
I Don't Care About Security (And Neither Should You)
An Authentication and Authorization Architecture for a Microservices World
Secured REST Microservices with Spring Cloud
Microservices Manchester: Authentication in Microservice Systems by David Borsos
JDD2015: Security in the era of modern applications and services - Bolesław D...
Open Id, O Auth And Webservices
AllTheTalks.Online 2020: "Basics of OAuth 2.0 and OpenID Connect"
InterCon 2016 - Segurança de identidade digital levando em consideração uma a...
iMasters Intercon 2016 - Identity within Microservices
Stateless authentication for microservices - GR8Conf 2015
Stateless token-based authentication for pure front-end applications
Ad

Recently uploaded (20)

PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PDF
medical staffing services at VALiNTRY
PPTX
Introduction to Artificial Intelligence
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PPTX
Transform Your Business with a Software ERP System
PDF
Understanding Forklifts - TECH EHS Solution
PDF
top salesforce developer skills in 2025.pdf
PPTX
history of c programming in notes for students .pptx
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PPTX
Odoo POS Development Services by CandidRoot Solutions
PPTX
CHAPTER 2 - PM Management and IT Context
PDF
Nekopoi APK 2025 free lastest update
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PPTX
ai tools demonstartion for schools and inter college
How to Migrate SBCGlobal Email to Yahoo Easily
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
medical staffing services at VALiNTRY
Introduction to Artificial Intelligence
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
Transform Your Business with a Software ERP System
Understanding Forklifts - TECH EHS Solution
top salesforce developer skills in 2025.pdf
history of c programming in notes for students .pptx
wealthsignaloriginal-com-DS-text-... (1).pdf
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
2025 Textile ERP Trends: SAP, Odoo & Oracle
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
Odoo POS Development Services by CandidRoot Solutions
CHAPTER 2 - PM Management and IT Context
Nekopoi APK 2025 free lastest update
Odoo Companies in India – Driving Business Transformation.pdf
ai tools demonstartion for schools and inter college

Dublin JUG Stateless Microservice Security via JWT, TomEE and MicroProfile