Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
REST Authentication with JWT
Search
Ignacio Anaya
November 15, 2017
Programming
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
REST Authentication with JWT
Ignacio Anaya
November 15, 2017
More Decks by Ignacio Anaya
See All by Ignacio Anaya
Security is not a feature‼️
ianaya89
2
540
Rompiendo Paradigmas Otra Vuez! 🔨📜3️⃣
ianaya89
0
170
Security is not a feature!
ianaya89
1
400
What's next in Vue 3? 🖖 3️⃣
ianaya89
0
150
What's next in Vue 3? 🖖 3️⃣
ianaya89
0
310
Vue.js, PWA & The Subway Dilemma
ianaya89
0
230
PWA with PWF
ianaya89
0
69
Decentralizing the Web with JavaScript
ianaya89
0
170
hey-devs-time-to-care-about-web-apps-security.pdf
ianaya89
0
140
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
270
yield再入門 #phpcon
o0h
PRO
0
550
自作OSでスライド発表する
uyuki234
1
3.9k
AIエージェントで 変わるAndroid開発環境
takahirom
2
680
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
2.7k
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
860
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
340
5分で問診!Composer セキュリティ健康診断
codmoninc
0
360
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
920
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
530
Performance Engineering for Everyone
elenatanasoiu
0
270
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
170
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
320
Documentation Writing (for coders)
carmenintech
77
5.4k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Side Projects
sachag
455
43k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Agile that works and the tools we love
rasmusluckow
331
22k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
350
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Odyssey Design
rkendrick25
PRO
2
730
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
180
First, design no harm
axbom
PRO
2
1.2k
Transcript
REST Authen,ca,on with JWT { REST Authen-ca-on with JWT }
- @ianaya89 1
! Nacho Anaya @ianaya89 • Full Stack Developer, Tech Trainer
& Speaker • Ambassador @Auth0 • Organizer @Vuenos_Aires { REST Authen-ca-on with JWT } - @ianaya89 2
{ REST Authen-ca-on with JWT } - @ianaya89 3
! Why token authen,ca,on? { REST Authen-ca-on with JWT }
- @ianaya89 4
! Why token authen,ca,on? > Stateless { REST Authen-ca-on with
JWT } - @ianaya89 5
! Why token authen,ca,on? > Decoupled { REST Authen-ca-on with
JWT } - @ianaya89 6
! Why token authen,ca,on? > Scalable { REST Authen-ca-on with
JWT } - @ianaya89 7
! Why JWT? { REST Authen-ca-on with JWT } -
@ianaya89 8
! Why JWT? > Standard RFC 7519 { REST Authen-ca-on
with JWT } - @ianaya89 9
! Why JWT? > Self Contained { REST Authen-ca-on with
JWT } - @ianaya89 10
! Why JWT? > Compact { REST Authen-ca-on with JWT
} - @ianaya89 11
! Why JWT? > Signed HMAC - RSA - ECDSA
{ REST Authen-ca-on with JWT } - @ianaya89 12
! Why JWT? > JSON { REST Authen-ca-on with JWT
} - @ianaya89 13
! What is JWT? { REST Authen-ca-on with JWT }
- @ianaya89 14
! What is JWT? header.payload.signature + Base64 { REST Authen-ca-on
with JWT } - @ianaya89 15
! What is JWT? { REST Authen-ca-on with JWT }
- @ianaya89 16
! Header { "alg": "HS256", "typ": "JWT" } { REST
Authen-ca-on with JWT } - @ianaya89 17
! Payload { "id": "1234567890", "name": "John Doe", "admin": true,
"iss": "https://api.com", "exp": 1510745797148 } { REST Authen-ca-on with JWT } - @ianaya89 18
! Payload { "id": "1234567890", "name": "John Doe", "admin": true,
"iss": "https://api.com", "exp": 1510745797148 } { REST Authen-ca-on with JWT } - @ianaya89 19
✍ Signature const data = base64urlEncode( header ) + '.'
+ base64urlEncode( payload ) HMACSHA256(data, 'your_secret_message') { REST Authen-ca-on with JWT } - @ianaya89 20
✍ Signature const data = base64urlEncode( header ) + '.'
+ base64urlEncode( payload ) HMACSHA256(data, 'your_secret_message') { REST Authen-ca-on with JWT } - @ianaya89 21
{ REST Authen-ca-on with JWT } - @ianaya89 22
! When to use it? { REST Authen-ca-on with JWT
} - @ianaya89 23
! When to use it? > Authen)ca)on > Informa*on Exchange
{ REST Authen-ca-on with JWT } - @ianaya89 24
! Where to use it? { REST Authen-ca-on with JWT
} - @ianaya89 25
! Where to use it? SPA's - Mobile Serverless -
IoT { REST Authen-ca-on with JWT } - @ianaya89 26
{ REST Authen-ca-on with JWT } - @ianaya89 27
! { REST Authen-ca-on with JWT } - @ianaya89 28
! REST API's { REST Authen-ca-on with JWT } -
@ianaya89 29
! How does it work with REST? { REST Authen-ca-on
with JWT } - @ianaya89 30
{ REST Authen-ca-on with JWT } - @ianaya89 31
! How does it work with REST? 1. Sends Creden+als
POST /login { "user": "ianaya89", "password": "dont-hack-me" } { REST Authen-ca-on with JWT } - @ianaya89 32
! How does it work with REST? 2. Creates JWT
const jwt = require('jsonwebtoken') // POST /login function login (req, res, next) { // Validates user credentials... const payload = { user: 'ianaya89', role: 'admin' } const token = jwt.sign(payload, 'this_is_super_secret') res.status(201).send({ token: `Bearer ${token}` }) } router.post('/login', login) { REST Authen-ca-on with JWT } - @ianaya89 33
! How does it work with REST? 3. Returns JWT
const jwt = require('jsonwebtoken') // POST /login function login (req, res, next) { // Validates user credentials... const payload = { user: 'ianaya89', role: 'admin' } const token = jwt.sign(payload, 'this_is_super_secret') res.status(201).send({ token: `Bearer ${token}` }) } router.post('/login', login) { REST Authen-ca-on with JWT } - @ianaya89 34
! How does it work with REST? 4. Gets a
resource GET /resource Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkiLCJuYW1lIjoiSm9obiBEb2UiLCJhZG1pbiI6ZmFsc2V9. b99O1RrYbHtWJ3MGZXkdADZkmiLm9HNliRccKxMPDuc { REST Authen-ca-on with JWT } - @ianaya89 35
! How does it work with REST? 5. Verifies token
const jwt = require('jsonwebtoken') // GET /resource function getResource (req, res, next) { try { const payload = jwt.verify(token, 'this_is_super_secret') } catch (err) { return res.sendStatus(401) } } router.get('/resource', getResource) { REST Authen-ca-on with JWT } - @ianaya89 36
! How does it work with REST? 6. Sends response
const jwt = require('jsonwebtoken') // GET /resource function getResource (req, res, next) { try { const payload = jwt.verify(token, 'this_is_super_secret') res.send(' ! ') } catch (err) { return res.sendStatus(401) } } router.get('/resource', getResource) { REST Authen-ca-on with JWT } - @ianaya89 37
! How does it work with REST? 6. Sends response
const jwt = require('jsonwebtoken') // GET /resource function getResource (req, res, next) { try { const payload = jwt.verify(token, 'this_is_super_secret') if (payload.role !== 'admin') { return res.sendStatus(403) } res.send(' ! ') } catch (err) { return res.sendStatus(401) } } router.get('/resource', getResource) { REST Authen-ca-on with JWT } - @ianaya89 38
! Which languages are supported? { REST Authen-ca-on with JWT
} - @ianaya89 39
! Which languages are supported? > "All" of them {
REST Authen-ca-on with JWT } - @ianaya89 40
{ REST Authen-ca-on with JWT } - @ianaya89 41
! Is JWT secure? { REST Authen-ca-on with JWT }
- @ianaya89 42
! { REST Authen-ca-on with JWT } - @ianaya89 43
! Is JWT secure? ! Yes { REST Authen-ca-on with
JWT } - @ianaya89 44
! Is JWT secure? ! But... { REST Authen-ca-on with
JWT } - @ianaya89 45
{ REST Authen-ca-on with JWT } - @ianaya89 46
! Is JWT secure? > Anyone can view the content
{ REST Authen-ca-on with JWT } - @ianaya89 47
! Is JWT secure? > No one can modify it
{ REST Authen-ca-on with JWT } - @ianaya89 48
! Is JWT secure? > JWT is signed not ecnrpyted
{ REST Authen-ca-on with JWT } - @ianaya89 49
! Is JWT secure? > Keep your "secret" secret {
REST Authen-ca-on with JWT } - @ianaya89 50
! Resources • jwt.io • jwt-handbook • demo-auth-jwt-api { REST
Authen-ca-on with JWT } - @ianaya89 51
! { REST Authen-ca-on with JWT } - @ianaya89 52
! Thanks! @ianaya89 bit.ly/rest-auth-jwt { REST Authen-ca-on with JWT }
- @ianaya89 53