Jak pracovat s tokeny
Předtím než se něco dozvíte o tokenech, tak by to chtělo znát pár základních pojmů. Těmi jsou Autentizace
a Autorizace
. Tyhle slova můžete bězně potkávat při zabezpečování nějaké aplikace či systému.
Autentizace je proces ověřování daného uživatele na základě nějakých údajů, které potvrzují identitu daného uživatele. Když se identita uživatele autentizuje - ověří, tak následně může začít proces autorizace.
Autorizace je proces ve kterém je autentizovanému uživateli povoleno přistupovat k určitým zdrojům na základě přidělených oprávnění. Jinak řečeno je to proces, který určuje jestli můžete přistupovat k určité funkci, akci, stránce, souboru atd.
JSON Web Token (JWT) je RFC7519 internetový standard pro výměnu informací mezi jednou a druhou stranou. Hlavní podstatou není skrýt
data během komunikace, ale zajistit
, že data během komunikace nebyla pozměněna
- autenticita dat. Jednodušeji řečeno. JWT je JSON objekt, který se skládá ze tří částí.
- Header (hlavička)
- Payload (data)
- Signature (podpis)
Pro nádherný vyzobrazení nám může pomoct stránka jwt.io, kde můžeme vidět JWT barevně rozdělený.
JWT může mít například tuto enkódovanou podobu:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkphbiBUaWxsIiwiaWF0IjoxNTE2MjM5MDIyfQ.fRVMZRp-wSXBOeoqxV7hbEkArRATjOUjKEsttB4h8Zw
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
- headereyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkphbiBUaWxsIiwiaWF0IjoxNTE2MjM5MDIyfQ
- payloadfRVMZRp-wSXBOeoqxV7hbEkArRATjOUjKEsttB4h8Zw
- signature
V dekódované podobě by náš token vypadal takhle:
{ "alg": "HS256", "typ": "JWT" }
- header{ "sub": "1234567890", "name": "Jan Till", "iat": 1516239022 }
- payloadHMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), 256-bit-secret )
- signature
Vysvětlené části:
- header (hlavička) - Ve hlavičce je vepsáno jakým způsobem se bude generovat podpis tokenu.
"alg": "HS256"
řiká, že token bude podepsán pomocí algoritmuHMAC-SHA256
- payload (data) - Data, které náš token přenáší. Pro JWT jsou některé názvy v
""
předem definovány. Jinak si názvy můžeme utvářet dle libosti. - signature (podpis) - Způsob, kterým bude probíhat výpočet podpisu pro náš JWT.
- Znalosti z předchozích hodin -
JavaScript
,NodeJS
,MongoDB
nebo nějakou jinou databázi VSC
nebo nějaké jiné IDEčkoPostman
- Vytvoříme (znovu použijeme) API, která bude komunikovat s databází (v našem případě MongoDB)
- Doinstalujeme moduly
jsonwebtoken
abcryptjs
- Vytvoříme registraci a přihlášení
- Vytvoříme middleware pro autentizace
- V routes/index.js nastavíme autorizaci pro GET /