SlideShare a Scribd company logo
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Deconstructing REST
Security
Bruno Baptista
Tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
“The nice thing about standards is
you have so many to choose from.”
- Andrew S. Tanenbaum
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Focus Areas
• Beyond Basic Auth
• Theory of OAuth 2.0
• Introduction of JWT
• Google/Facebook style API security
• Stateless vs Stateful Architecture
• HTTP Signatures
• Amazon EC2 style API security
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Baseline Architecture
1000 users
x 3 TPS
4 hops
3000 TPS
frontend
12000 TPS
backend
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Basic Auth
(and its problems)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @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}}
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Basic Auth
Password Sent
3000 TPS
(HTTP+SSL)
username+password
Base64
(no auth)
3000 TPS
(LDAP)
12000 TPS
(HTTP)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Basic Auth
Password Sent
3000 TPS
(HTTP+SSL)
username+password
Base64
username+password
Base64
15000 TPS
(LDAP)
Password Sent
12000 TPS
(HTTP)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Basic Auth
Password Sent
3000 TPS
(HTTP+SSL)
username+password
Base64
IP
whitelisting
3000 TPS
(LDAP)
12000 TPS
(HTTP)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
“Hey, give me all
of Joe’s salary
information.”
“I don’t know
who you are,
…
but sure!”
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Latveria Attacks
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Basic Auth - Attacks
Valid
Password Sent
3000 TPS
(HTTP+SSL) IP
whitelisting
9000 TPS
(LDAP)
12000 TPS
(HTTP)
Invalid
Password Sent
6000 TPS
(HTTP+SSL)
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2.0
(and its problems)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2 - Password Grant
(LDAP)
(Token Store)
Verify
Passwor
d
Generate
Token
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @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"}}
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @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"}}
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @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"}}
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @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"}}
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @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"}}
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2 - Refresh Grant
(LDAP)
(Token Store)
Verify
Passwor
d
Generate
Token
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Old pair
• Access Token 2YotnFZFEjr1zCsicMWpAA
• Refresh Token tGzv3JOkF0XG5Qx2TlKWIA
New pair
• Access Token 6Fe4jd7TmdE5yW2q0y6W2w
• Refresh Token hyT5rw1QNh5Ttg2hdtR54e
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @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"}}
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @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"}}
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @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"}}
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
What have we achieved?
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
You have more passwords
(at least your devices do)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Term Alert
• Password Grant???
• Logging in -> grant process
• Token?
• Slightly less crappy password
• Equally crappy HTTP Session ID
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2
Tokens Sent
3000 TPS
(HTTP+SSL)
IP
whitelisting
3000 TPS
(token checks)
Password Sent
1000/daily
(HTTP+SSL)
OAuth 2
(LDAP)
4 hops
12000 TPS
backend
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
“Who the heck
is
6Fe4jd7TmdE5y
W2q0y6W2w
???????”
“No idea, dude.
Ask the token
server.”
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2
Tokens Sent
3000 TPS
(HTTP+SSL)
IP
whitelistin
g
3000 TPS
(token checks)
Password Sent
1000/daily
(HTTP+SSL)
OAuth 2
(LDAP)
12000 TPS
(token checks)
8 hops
24000 TPS
backend
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2
Tokens Sent
3000 TPS
(HTTP+SSL)
IP
whitelisting
3000 TPS
(token checks)
Password Sent
1000/daily
(HTTP+SSL)
OAuth 2
(LDAP)
12000 TPS
(token checks)
8 hops
24000 TPS
backend
55% of all traffic
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2
Tokens Sent
3000 TPS
(HTTP+SSL)
IP
whitelisting
0 TPS
(token checks)
Password Sent
1000/daily
(HTTP+SSL)
OAuth 2
(LDAP)
0 TPS
(token checks)
0 hops
0 TPS
backend
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2
Pointer Pointer
State
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2.0
High Frequency Password
Exchange Algorithm?
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Problem: how to detect if a file's
contents have changed?
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Hashing and Signing
Symmetric and Asymmetric
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
A Hash represents a unique file
The bigger hash, the less collision probability
SHA-256 is used now
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Real Madrid 3 - Barcelona 1
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Real Madrid 3 - Barcelona 1
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Real Madrid 3 - Barcelona 3
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
HMAC (Symmetric)
RSA (Asymmetric)
abc123 abc123
private
public
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Encoding a Hash or Signature
openssl genpkey -algorithm RSA -out private_key.pem --pkeyopt rsa_keygen_bits:1024
openssl rsa -pubout -in private_key.pem -out public_key.pem
openssl dgst -sha256 -sign private_key.pem -out checksums_data.txt.sign checksums_data.txt
openssl dgst -sha256 -verify public_key.pem -signature checksums_data.txt.sign checksums_data.txt
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2.0
+
JSon Web Tokens (JWT)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
JSon Web Token
• Pronounced “JOT”
• Fancy JSON map
• Base64 URL Encoded
• Digitally Signed (RSA-SHA256, HMAC-SHA512, etc)
• Built-in expiration
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Access Token Previously
• 6Fe4jd7TmdE5yW2q0y6W2w
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Access Token Now
• eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbi10eXBlIjoi
YWNjZXNzLXRva2VuIiwidXNlcm5hbWUiOiJzbm9vcHkiLCJhb
mltYWwiOiJiZWFnbGUiLCJpc3MiOiJodHRwczovL2RlbW8uc3V
wZXJiaXouY29tL29hdXRoMi90b2tlbiIsInNjb3BlcyI6WyJ0d2l0d
GVyIiwibWFucy1iZXN0LWZyaWVuZCJdLCJleHAiOjE0NzQyO
DA5NjMsImlhdCI6MTQ3NDI3OTE2MywianRpIjoiNjY4ODFiMD
Y4YjI0OWFkOSJ9.DTfSdMzIIsC0j8z3icRdYO1GaMGl6j1I_2DB
jiiHW9vmDz8OAw8Jh8DpO32fv0vICc0hb4F0QCD3KQnv8GV
M73kSYaOEUwlW0k1TaElxc43_Ocxm1F5IUNZvzlLJ_ksFXGD
L_cuadhVDaiqmhct098ocefuv08TdzRxqYoEqYNo
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @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 such as expiration
• signature (Binary > Base64 URL Encoded
• The actual digital signature
• made exclusively by the /oauth2/token endpoint
• If RSA, can be checked by anyone
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
• { "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_2DBjiiHW9vmDz8OAw8Jh8DpO32fv0vICc0hb4F
0QCD3KQnv8GVM73kSYaOEUwlW0k1TaElxc43_Ocxm1F5IUNZvzlLJ_ksFXGDL_cuad
hVDaiqmhct098ocefuv08TdzRxqYoEqYNo
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Subtle But High Impact
Architectural Change
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
What we had
(quick recap)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
(LDAP)
Pull User Info
From IDP
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
(LDAP)
Generate an
Access Token
(pointer)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
(LDAP)
Insert both
into DB
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
(LDAP)
Send Access Token (pointer)
to client
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Results
Client Holds
Pointer
Server Holds
State
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
What we can do now
(Hello JWT!)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
(LDAP)
Pull User Info
From IDP
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
(LDAP)
Format the data
as JSON
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
(LDAP)
RSA-SHA 256
sign JSON private
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
(LDAP)
Insert only
pointer
into DB
(for revocation)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
(LDAP)
Send Access Token (state)
to client
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Client Holds
State
Server Holds
Pointer
Desired
Results
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2 - Password Grant
(LDAP)
(Token ID Store)
Verify
Passwor
d
Generate
Signed
Token
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2.0 Message with JWT
POST /painter/color/palette HTTP/1.1
Host: api.superbiz.io
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbi10eXBlIjoiYWNjZXNzLXR
va2VuIiwidXNlcm5hbWUiOiJzbm9vcHkiLCJhbmltYWwiOiJiZWFnbGUiLCJpc3MiOiJodHRwczovL2RlbW8uc3VwZXJ
iaXouY29tL29hdXRoMi90b2tlbiIsInNjb3BlcyI6WyJ0d2l0dGVyIiwibWFucy1iZXN0LWZyaWVuZCJdLCJleHAiOjE0NzQy
ODA5NjMsImlhdCI6MTQ3NDI3OTE2MywianRpIjoiNjY4ODFiMDY4YjI0OWFkOSJ9.DTfSdMzIIsC0j8z3icRdYO1GaMGl
6j1I_2DBjiiHW9vmDz8OAw8Jh8DpO32fv0vICc0hb4F0QCD3KQnv8GVM73kSYaOEUwlW0k1TaElxc43_Ocxm1F5IUNZ
vzlLJ_ksFXGDL_cuadhVDaiqmhct098ocefuv08TdzRxqYoEqYNo
User-Agent: curl/7.43.0
Accept: */*
Content-Type: application/json
Content-Length: 46
{"color":{"b":0,"g":255,"r":0,"name":"green"}}
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2 + JWT
Tokens Sent
3000 TPS
(HTTP+SSL)
0.55 TPS
(refresh token checks
each 30m)
Password Sent
1000/daily
(HTTP+SSL)
OAuth 2
(LDAP)
4 hops
12000 TPS
backend
3000 TPS
(signature verification)
12000 TPS
(signature verification)(private key)
(public key)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
“Hey, give me all
of Joe’s salary
information.”
“Not a chance!”
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
“Hey, give me all
of Joe’s salary
information.”
“Sure thing!”
Every Microservice Has the Gateway's Public Key
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Latveria Attacks
(again)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2 + JWT
Valid
Tokens Sent
3000 TPS
(HTTP+SSL)
0.55 TPS
(refresh token checks)
Password Sent
1000/daily
(HTTP+SSL)
(LDAP)
4 hops
12000 TPS
backend
9000 TPS
(signature verification)
12000 TPS
(signature verification)
Invalid
Tokens Sent
6000 TPS
(HTTP+SSL)
(private key)
(public key)
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
HTTP Signatures
(Amazon EC2 style API Security)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
HTTP Signatures
• No “secret” ever hits the wire
• Signs the message itself
• Proves identity
• Prevents message tampering
• Symmetric or Asymmetric signatures
• IETF Draft
• https://tools.ietf.org/html/draft-cavage-http-signatures
• Extremely simple
• Does NOT eliminate benefits of JWT
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Signature Message
POST /painter/color/palette HTTP/1.1
Host: api.superbiz.io
Authorization: Signature keyId=“my-key-name",
algorithm="hmac-sha256",
headers="content-length host date (request-target)”,
signature="j050ZC4iWDW40nVx2oVwBEymXzwvsgm+hKBkuw04b+w="
Date: Mon, 19 Sep 2016 16:51:35 PDT
Accept: */*
Content-Type: application/json
Content-Length: 46
{"color":{"b":0,"g":255,"r":0,"name":"green"}}
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Signature closeup
Signature
keyId=“my-key-name",
algorithm="hmac-sha256",
headers="content-length host date (request-target)”,
signature="j050ZC4iWDW40nVx2oVwBEymXzwvsgm+hKBkuw04b+w=
"
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Signature Auth
Password Sent
0 TPS
(HTTP)
Signature (no auth)
3000 TPS
(LDAP or Keystore)
12000 TPS
(HTTP)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Signature Auth
Password Sent
0 TPS
(HTTP)
Signature Signature
3000 TPS
(LDAP or Keystore)
12000 TPS
(HTTP)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
“Hey, give me all
of Joe’s salary
information.”
“Hey, Larry!
Sure!”
Issue Returns
(bad)
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2.0 Proof-of-Possession
(JWT + HTTP Signatures)
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Key Value
Identity Information
(JWT)
Key ID
Proof Of Identity
(HTTP Signature)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
{ "alg": “RS256", "typ": “JWT" }
{ "token-type": "access-token",
"username": "snoopy",
"iss": "https://demo.superbiz.com/oauth2/token",
"scopes": ["twitter”, "mans-best-friend"],
"exp": 1474280963,
"iat": 1474279163,
"jti": "66881b068b249ad9"
}
DTfSdMzIIsC0j8z3icRdYO1GaMGl6j1I_2DBjiiHW9vmDz8OAw8Jh8DpO32fv0vICc0hb
4F0QCD3KQnv8GVM73kSYaOEUwlW0k1TaElxc43_Ocxm1F5IUNZvzlLJ_ksFXGDL_cu
adhVDaiqmhct098ocefuv08TdzRxqYoEqYNo
Access Token
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
{ "alg": “RS256", "typ": “JWT" }
{ "token-type": "pop",
"cnf":{ "kid": "green-1234" }
"username": "snoopy",
"iss": "https://demo.superbiz.com/oauth2/token",
"scopes": ["twitter”, "mans-best-friend"],
"exp": 1474280963,
"iat": 1474279163,
"jti": "66881b068b249ad9"
}
DTfSdMzIIsC0j8z3icRdYO1GaMGl6j1I_2DBjiiHW9vmDz8OAw8Jh8DpO32fv0vICc0hb
4F0QCD3KQnv8GVM73kSYaOEUwlW0k1TaElxc43_Ocxm1F5IUNZvzlLJ_ksFXGDL_cu
adhVDaiqmhct098ocefuv08TdzRxqYoEqYNo
Access Token
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2 - Password Grant
(LDAP)
(Token ID Store)
Verify
Passwor
d
Generate
Signed
Token
Generate
HMAC
Key
(Key Store)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
JSON Web Key (encoded)
eyJrdHkiOiJvY3QiLCJ1c2UiOiJzaWciLCJraWQiOiJvcmFuZ2UteXl
qOUQwZWgiLCJrIjoiVlotMFFHTFoyUF9SUFVTVzEwQ0l1MFdNeV
hxLU5EMnBtRFl6QTBPVEtXVEhscDVpYWM1SzRWZWlSci1fQk9v
WEo0WDJmU1R0NG5Id29fcXV0YTdqSkpLVDRQRVd5WWFuQlN
Gc2kwRFc3b3dULUhFeEFHRHlKdEhVdE53NXhzczhOajZPeE5Qdj
ZyUk9FLWtldmhMMndCOWNxZ2RJc2NidkRocmFzMzljd2ZzIiwiY
WxnIjoiSFMyNTYifQ
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
JSON Web Key (decoded)
{ "kty": "oct",
"use": "sig",
"kid": "orange-1234",
"k": "VZ-0QGLZ2P_RPUSW10CIu0WMyXq-ND2pmDYzA0OTKW
THlp5iac5K4VeiRr-_BOoXJ4X2fSTt4nHwo_quta7j
JJKT4PEWyYanBSFsi0DW7owT-HExAGDyJtHUtNw5xs
s8Nj6OxNPv6rROE-kevhL2wB9cqgdIscbvDhras39c
wfs",
"alg": "HS256"
}
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Signed OAuth 2.0 Message
POST /painter/color/palette HTTP/1.1
Host: api.superbiz.io
Authorization: Signature keyId=“orange-1234", algorithm="hmac-sha256",
headers="content-length host date (request-target)”,
signature="j050ZC4iWDW40nVx2oVwBEymXzwvsgm+hKBkuw04b+w="
Bearer: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbi10eXBlIjoiYWNjZXNzLXRva2VuIiwidXNlcm5h
bWUiOiJzbm9vcHkiLCJhbmltYWwiOiJiZWFnbGUiLCJpc3MiOiJodHRwczovL2RlbW8uc3VwZXJiaXouY29t
L2
9hdXRoMi90b2tlbiIsInNjb3BlcyI6WyJ0d2l0dGVyIiwibWFucy1iZXN0LWZyaWVuZCJdLCJleHAiOjE0NzQyO
DA5NjMsImlhdCI6MTQ3NDI3OTE2MywianRpIjoiNjY4ODFiMDY4YjI0OWFkOSJ9.DTfSdMzIIsC0j8z3icRdY
O1GMGl6j1I_2DBjiiHW9vmDz8OAw8Jh8DpO32fv0vICc0hb4F0QCD3KQnv8GVM73kSYaOEUwlW0k1TaEl
xc43_Ocxm1F5IUNZvzlLJ_ksFXGDL_cuadhVDaiqmhct098ocefuv08TdzRxqYoEqYNo
Date: Mon, 19 Sep 2016 16:51:35 PDT
Accept: */*
Content-Type: application/json
Content-Length: 46
{"color":{"b":0,"g":255,"r":0,"name":"green"}}
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
OAuth 2 + JWT + Signatures
Tokens Sent
3000 TPS
(HTTP+SSL)
0.55 TPS
(refresh token checks)
Password Sent
1000/daily
(HTTP+SSL)
OAuth 2
(LDAP)
4 hops
12000 TPS
backend
3000 TPS
(signature verification)
12000 TPS
(signature verification)
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
https://tools.ietf.org/html/draft-ietf-oauth-pop-key-distribution
Specification Reference
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Observations
• HTTP Signatures the only HTTP friendly approach
• Signatures does not solve the “Identity Load” problem
• OAuth 2 with JWT significantly improves IDP load
• Plain OAuth 2
• HTTP Session-like implications
• OAuth 2 with JWT
• Signed cookie
• Signing key to the future
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Practical considerations
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
Where to store the JWTs ?
• Local Storage!
• Some people are using cookies for that...
• Encode it's contents with base64URL
• The refresh token must not be sent in all requests… Unless…
• Update the cookie transparently when the Access Token expires
• You can potentially do cookie revocation.
#RESTSecurity @dblevins @tomitribe
MadridJUG
#RESTSecurity @brunobat_ @tomitribe
JWT size
• Max header size issue
• Compress JWT payload
Thank You
Slides & Gateway Sign-up
https://tribestream.io/madridjug-2018/
#RESTSecurity
MadridJUG

More Related Content

What's hot

2016 JavaOne Deconstructing REST Security
2016 JavaOne Deconstructing REST Security2016 JavaOne Deconstructing REST Security
2016 JavaOne Deconstructing REST Security
David Blevins
 
2017 dev nexus_deconstructing_rest_security
2017 dev nexus_deconstructing_rest_security2017 dev nexus_deconstructing_rest_security
2017 dev nexus_deconstructing_rest_security
David Blevins
 
gRPC vs REST: let the battle begin!
gRPC vs REST: let the battle begin!gRPC vs REST: let the battle begin!
gRPC vs REST: let the battle begin!
Alex Borysov
 
Deconstructing and Evolving REST security
Deconstructing and Evolving REST securityDeconstructing and Evolving REST security
Deconstructing and Evolving REST security
Jonathan Gallimore
 
Basics of GnuPG (gpg) command in linux
Basics of GnuPG (gpg) command in linuxBasics of GnuPG (gpg) command in linux
Basics of GnuPG (gpg) command in linux
Sanjeev Kumar Jaiswal
 
2018 Denver JUG Deconstructing and Evolving REST Security
2018 Denver JUG Deconstructing and Evolving REST Security2018 Denver JUG Deconstructing and Evolving REST Security
2018 Denver JUG Deconstructing and Evolving REST Security
David Blevins
 
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
Vladimir Dejanovic
 
Dublin JUG Stateless Microservice Security via JWT, TomEE and MicroProfile
Dublin JUG Stateless Microservice Security via JWT, TomEE and MicroProfileDublin JUG Stateless Microservice Security via JWT, TomEE and MicroProfile
Dublin JUG Stateless Microservice Security via JWT, TomEE and MicroProfile
Jean-Louis MONTEIRO
 
Darkweb + Python: discover, analyze and extract information from hidden services
Darkweb + Python: discover, analyze and extract information from hidden servicesDarkweb + Python: discover, analyze and extract information from hidden services
Darkweb + Python: discover, analyze and extract information from hidden services
Jose Manuel Ortega Candel
 

What's hot (9)

2016 JavaOne Deconstructing REST Security
2016 JavaOne Deconstructing REST Security2016 JavaOne Deconstructing REST Security
2016 JavaOne Deconstructing REST Security
 
2017 dev nexus_deconstructing_rest_security
2017 dev nexus_deconstructing_rest_security2017 dev nexus_deconstructing_rest_security
2017 dev nexus_deconstructing_rest_security
 
gRPC vs REST: let the battle begin!
gRPC vs REST: let the battle begin!gRPC vs REST: let the battle begin!
gRPC vs REST: let the battle begin!
 
Deconstructing and Evolving REST security
Deconstructing and Evolving REST securityDeconstructing and Evolving REST security
Deconstructing and Evolving REST security
 
Basics of GnuPG (gpg) command in linux
Basics of GnuPG (gpg) command in linuxBasics of GnuPG (gpg) command in linux
Basics of GnuPG (gpg) command in linux
 
2018 Denver JUG Deconstructing and Evolving REST Security
2018 Denver JUG Deconstructing and Evolving REST Security2018 Denver JUG Deconstructing and Evolving REST Security
2018 Denver JUG Deconstructing and Evolving REST Security
 
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
 
Dublin JUG Stateless Microservice Security via JWT, TomEE and MicroProfile
Dublin JUG Stateless Microservice Security via JWT, TomEE and MicroProfileDublin JUG Stateless Microservice Security via JWT, TomEE and MicroProfile
Dublin JUG Stateless Microservice Security via JWT, TomEE and MicroProfile
 
Darkweb + Python: discover, analyze and extract information from hidden services
Darkweb + Python: discover, analyze and extract information from hidden servicesDarkweb + Python: discover, analyze and extract information from hidden services
Darkweb + Python: discover, analyze and extract information from hidden services
 

Similar to 2018 Madrid JUG Deconstructing REST Security

2018 IterateConf Deconstructing and Evolving REST Security
2018 IterateConf Deconstructing and Evolving REST Security2018 IterateConf Deconstructing and Evolving REST Security
2018 IterateConf Deconstructing and Evolving REST Security
David Blevins
 
2018 SDJUG Deconstructing and Evolving REST Security
2018 SDJUG Deconstructing and Evolving REST Security2018 SDJUG Deconstructing and Evolving REST Security
2018 SDJUG Deconstructing and Evolving REST Security
David Blevins
 
2017 JavaOne Deconstructing and Evolving REST Security
2017 JavaOne Deconstructing and Evolving REST Security2017 JavaOne Deconstructing and Evolving REST Security
2017 JavaOne Deconstructing and Evolving REST Security
David Blevins
 
2018 Boulder JUG Deconstructing and Evolving REST Security
2018 Boulder JUG Deconstructing and Evolving REST Security2018 Boulder JUG Deconstructing and Evolving REST Security
2018 Boulder JUG Deconstructing and Evolving REST Security
David Blevins
 
2018 jPrime Deconstructing and Evolving REST Security
2018 jPrime Deconstructing and Evolving REST Security2018 jPrime Deconstructing and Evolving REST Security
2018 jPrime Deconstructing and Evolving REST Security
David Blevins
 
Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t...
 Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t... Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t...
Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t...
AboutYouGmbH
 
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
Athens IoT Meetup
 
CSU33012-I-microservices.pdf
CSU33012-I-microservices.pdfCSU33012-I-microservices.pdf
CSU33012-I-microservices.pdf
Ricky Garg
 
How do Things talk? IoT Application Protocols 101
How do Things talk? IoT Application Protocols 101How do Things talk? IoT Application Protocols 101
How do Things talk? IoT Application Protocols 101
Christian Götz
 
Cilium - Network security for microservices
Cilium - Network security for microservicesCilium - Network security for microservices
Cilium - Network security for microservices
Thomas Graf
 
Solving HTTP Problems with Code and Protocols
Solving HTTP Problems with Code and ProtocolsSolving HTTP Problems with Code and Protocols
Solving HTTP Problems with Code and Protocols
C4Media
 
Deconstructing and Evolving REST Security
Deconstructing and Evolving REST SecurityDeconstructing and Evolving REST Security
Deconstructing and Evolving REST Security
Roberto Cortez
 
LoRa Flue smoke gas monitoring network [2019 - cassini.ginesi.leaschiera]
LoRa Flue smoke gas monitoring network   [2019 - cassini.ginesi.leaschiera]LoRa Flue smoke gas monitoring network   [2019 - cassini.ginesi.leaschiera]
LoRa Flue smoke gas monitoring network [2019 - cassini.ginesi.leaschiera]
FrancescoCassini
 
Cilium - API-aware Networking and Security for Containers based on BPF
Cilium - API-aware Networking and Security for Containers based on BPFCilium - API-aware Networking and Security for Containers based on BPF
Cilium - API-aware Networking and Security for Containers based on BPF
Thomas Graf
 
Fiware io t_ul20_cpbr8
Fiware io t_ul20_cpbr8Fiware io t_ul20_cpbr8
Fiware io t_ul20_cpbr8
FIWARE
 
2018 JavaLand Deconstructing and Evolving REST Security
2018 JavaLand Deconstructing and Evolving REST Security2018 JavaLand Deconstructing and Evolving REST Security
2018 JavaLand Deconstructing and Evolving REST Security
David Blevins
 
MQTT - Communication in the Internet of Things
MQTT - Communication in the Internet of ThingsMQTT - Communication in the Internet of Things
MQTT - Communication in the Internet of Things
Christian Götz
 
Cilium:: Application-Aware Microservices via BPF
Cilium:: Application-Aware Microservices via BPFCilium:: Application-Aware Microservices via BPF
Cilium:: Application-Aware Microservices via BPF
Cynthia Thomas
 
How Do ‘Things’ Talk? - An Overview of the IoT/M2M Protocol Landscape at IoT ...
How Do ‘Things’ Talk? - An Overview of the IoT/M2M Protocol Landscape at IoT ...How Do ‘Things’ Talk? - An Overview of the IoT/M2M Protocol Landscape at IoT ...
How Do ‘Things’ Talk? - An Overview of the IoT/M2M Protocol Landscape at IoT ...
Christian Götz
 
WebRTC Tutorial by Dean Bubley of Disruptive Analysis & Tim Panton of Westhaw...
WebRTC Tutorial by Dean Bubley of Disruptive Analysis & Tim Panton of Westhaw...WebRTC Tutorial by Dean Bubley of Disruptive Analysis & Tim Panton of Westhaw...
WebRTC Tutorial by Dean Bubley of Disruptive Analysis & Tim Panton of Westhaw...
Dean Bubley
 

Similar to 2018 Madrid JUG Deconstructing REST Security (20)

2018 IterateConf Deconstructing and Evolving REST Security
2018 IterateConf Deconstructing and Evolving REST Security2018 IterateConf Deconstructing and Evolving REST Security
2018 IterateConf Deconstructing and Evolving REST Security
 
2018 SDJUG Deconstructing and Evolving REST Security
2018 SDJUG Deconstructing and Evolving REST Security2018 SDJUG Deconstructing and Evolving REST Security
2018 SDJUG Deconstructing and Evolving REST Security
 
2017 JavaOne Deconstructing and Evolving REST Security
2017 JavaOne Deconstructing and Evolving REST Security2017 JavaOne Deconstructing and Evolving REST Security
2017 JavaOne Deconstructing and Evolving REST Security
 
2018 Boulder JUG Deconstructing and Evolving REST Security
2018 Boulder JUG Deconstructing and Evolving REST Security2018 Boulder JUG Deconstructing and Evolving REST Security
2018 Boulder JUG Deconstructing and Evolving REST Security
 
2018 jPrime Deconstructing and Evolving REST Security
2018 jPrime Deconstructing and Evolving REST Security2018 jPrime Deconstructing and Evolving REST Security
2018 jPrime Deconstructing and Evolving REST Security
 
Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t...
 Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t... Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t...
Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t...
 
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
 
CSU33012-I-microservices.pdf
CSU33012-I-microservices.pdfCSU33012-I-microservices.pdf
CSU33012-I-microservices.pdf
 
How do Things talk? IoT Application Protocols 101
How do Things talk? IoT Application Protocols 101How do Things talk? IoT Application Protocols 101
How do Things talk? IoT Application Protocols 101
 
Cilium - Network security for microservices
Cilium - Network security for microservicesCilium - Network security for microservices
Cilium - Network security for microservices
 
Solving HTTP Problems with Code and Protocols
Solving HTTP Problems with Code and ProtocolsSolving HTTP Problems with Code and Protocols
Solving HTTP Problems with Code and Protocols
 
Deconstructing and Evolving REST Security
Deconstructing and Evolving REST SecurityDeconstructing and Evolving REST Security
Deconstructing and Evolving REST Security
 
LoRa Flue smoke gas monitoring network [2019 - cassini.ginesi.leaschiera]
LoRa Flue smoke gas monitoring network   [2019 - cassini.ginesi.leaschiera]LoRa Flue smoke gas monitoring network   [2019 - cassini.ginesi.leaschiera]
LoRa Flue smoke gas monitoring network [2019 - cassini.ginesi.leaschiera]
 
Cilium - API-aware Networking and Security for Containers based on BPF
Cilium - API-aware Networking and Security for Containers based on BPFCilium - API-aware Networking and Security for Containers based on BPF
Cilium - API-aware Networking and Security for Containers based on BPF
 
Fiware io t_ul20_cpbr8
Fiware io t_ul20_cpbr8Fiware io t_ul20_cpbr8
Fiware io t_ul20_cpbr8
 
2018 JavaLand Deconstructing and Evolving REST Security
2018 JavaLand Deconstructing and Evolving REST Security2018 JavaLand Deconstructing and Evolving REST Security
2018 JavaLand Deconstructing and Evolving REST Security
 
MQTT - Communication in the Internet of Things
MQTT - Communication in the Internet of ThingsMQTT - Communication in the Internet of Things
MQTT - Communication in the Internet of Things
 
Cilium:: Application-Aware Microservices via BPF
Cilium:: Application-Aware Microservices via BPFCilium:: Application-Aware Microservices via BPF
Cilium:: Application-Aware Microservices via BPF
 
How Do ‘Things’ Talk? - An Overview of the IoT/M2M Protocol Landscape at IoT ...
How Do ‘Things’ Talk? - An Overview of the IoT/M2M Protocol Landscape at IoT ...How Do ‘Things’ Talk? - An Overview of the IoT/M2M Protocol Landscape at IoT ...
How Do ‘Things’ Talk? - An Overview of the IoT/M2M Protocol Landscape at IoT ...
 
WebRTC Tutorial by Dean Bubley of Disruptive Analysis & Tim Panton of Westhaw...
WebRTC Tutorial by Dean Bubley of Disruptive Analysis & Tim Panton of Westhaw...WebRTC Tutorial by Dean Bubley of Disruptive Analysis & Tim Panton of Westhaw...
WebRTC Tutorial by Dean Bubley of Disruptive Analysis & Tim Panton of Westhaw...
 

Recently uploaded

Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 

Recently uploaded (20)

Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 

2018 Madrid JUG Deconstructing REST Security