Základy JWT pre začiatočníkov

Vyskúšajte Náš Nástroj Na Odstránenie Problémov

Základy JWT pre začiatočníkov

V tomto článku budú vysvetlené základy toho, čo sú webové tokeny JSON (JWT) a prečo sa používajú.

Webové tokeny JSON (JWT) sú dôležitou súčasťou zabezpečenia dôvery a bezpečnosti vo vašej aplikácii. ** JWT ** umožňuje bezpečné zobrazovanie nárokov, ako sú údaje o používateľoch.

Aby sme vysvetlili, ako funguje JWT, začnime s abstraktnou definíciou.



Jednoducho povedané, JWT je iba reťazec v nasledujúcom formáte:

header.payload.signature

Je potrebné poznamenať, že reťazec v dvojitých úvodzovkách sa skutočne považuje za platný JSON predmet.

Aby sme ukázali, ako a prečo sa ** JWT ** skutočne používajú, použijeme jednoduchý príklad s 3 entitami (pozri nasledujúci diagram). Entity v tomto prípade sú užívateľ, aplikačný server a autentifikačný server. Overovací server poskytne užívateľovi ** JWT **. S JWT , užívateľ potom môže s aplikáciou bezpečne komunikovať.

mangust veľa k mnohým

Ako aplikácia používa ** JWT ** na overenie pravosti používateľa.

V tomto prípade sa používateľ najskôr prihlási na autentifikačný server pomocou prihlasovacieho systému autentifikačného servera (napr. Používateľské meno a heslo, prihlásenie na Facebook, prihlásenie do systému Google atď.). Overovací server potom vytvorí JWT a odošle ho užívateľovi. Keď používateľ volá aplikáciu API, používateľ odovzdá ** JWT ** spolu s príponou POŽIAR hovor. V tomto nastavení by bol aplikačný server nakonfigurovaný tak, aby overoval, či prichádzajúce JWT sú vytvárané autentifikačným serverom (proces overovania bude podrobnejšie vysvetlený neskôr). Keď teda používateľ uskutočňuje hovory ** API ** s pripojeným JWT, aplikácia môže pomocou ** JWT ** overiť, či volanie ** API ** pochádza od overeného používateľa.

Teraz bude samotný JWT a jeho konštrukcia a overenie podrobnejšie preskúmané.

Krok 1. Vytvorte HLAVU

Komponent záhlavia JWT obsahuje informácie o tom, ako by sa mal počítať podpis JWT. Hlavička je objekt JSON v nasledujúcom formáte:

{ 'typ': 'JWT', 'alg': 'HS256' }

V tomto JSON hodnota kľúča typu určuje, že objekt je JWT, a hodnota kľúča alg určuje, ktorý hashovací algoritmus sa používa na vytvorenie komponentu podpisu JWT. V našom prípade na výpočet podpisu používame algoritmus HMAC-SHA256, algoritmus hash, ktorý používa tajný kľúč (podrobnejšie diskutované v kroku 3).

Krok 2. Vytvorte VÝPLATU

Časť užitočného zaťaženia JWT sú údaje uložené v JWT (tieto údaje sa tiež označujú ako nároky JWT). V našom prípade autentifikačný server vytvorí JWT s uloženými informáciami o používateľovi, konkrétne s ID užívateľa.

{ 'userId': 'b08f86af-35da-48f2-8fab-cef3904660bd' }

Údaje vo vnútri užitočného zaťaženia sa označujú ako nároky tokenu.

V našom prípade uvádzame do užitočného zaťaženia iba jeden nárok. Môžete uplatniť ľubovoľný počet nárokov. Existuje niekoľko rôznych štandardných nárokov na užitočné zaťaženie ** JWT **, napríklad vydavateľ, podmet a expiračná doba. Tieto polia môžu byť užitočné pri vytváraní JWT , ale sú voliteľné. Pozrite si stránka wikipédie na JWT pre podrobnejší zoznam ** JWT ** štandardných polí.

Majte na pamäti, že veľkosť údajov ovplyvní celkovú veľkosť JWT, vo všeobecnosti to nie je problém, ale príliš veľký JWT môže negatívne ovplyvniť výkon a spôsobiť latenciu.

Krok 3. Vytvorte PODPIS

Podpis sa vypočíta pomocou nasledujúceho pseudo kódu:

// signature algorithm data = base64urlEncode( header ) + . + base64urlEncode( payload ) hashedData = hash( data, secret ) signature = base64urlEncode( hashedData )

Tento algoritmus robí kóduje base64url hlavička a užitočné zaťaženie vytvorené v krokoch 1 a 2. Algoritmus potom spojí výsledné kódované reťazce spolu s bodkou (.) medzi nimi. V našom pseudo kóde je tento spojený reťazec priradený k údaje . The údaje reťazec je hašované pomocou tajného kľúča pomocou hashovacieho algoritmu uvedeného v Hlavička JWT . Výsledné hašované údaje sú priradené k hashedData. Tieto hašované údaje sa potom zakódujú base64url na vytvorenie súboru Podpis JWT .

V našom prípade sú hlavička aj užitočné zaťaženie base64url kódované ako:

// header eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 // payload eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ

Potom použitím špecifikovaného podpisového algoritmu s tajným kľúčom na periodicky spájanú kódovanú hlavičku a kódované užitočné zaťaženie získame hašované údaje potrebné na podpis. V našom prípade to znamená použitie algoritmu HS256 s tajným kľúčom nastaveným ako tajný reťazec na serveri údaje reťazec na získanie súboru hashedData reťazec*.* Potom, cez base64url, kódovanie hashedData reťazec získame nasledujúci podpis JWT:

// signature -xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM

Krok 4. Spojte všetky tri komponenty JWT dohromady

Teraz, keď sme vytvorili všetky tri komponenty, môžeme vytvoriť súbor JWT . Spomienka na hlavička.platiť.podpis štruktúra JWT , jednoducho musíme komponenty skombinovať tak, že ich oddelia bodky (.). Používame verzie hlavičky a užitočného zaťaženia kódované v base64url a podpis, ku ktorému sme prišli v kroku 3.

// JWT Token eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM

Môžete si skúsiť vytvoriť svoj vlastný JWT prostredníctvom svojho prehliadača na jwt.io .

Vráťme sa k nášmu príkladu Overenie server teraz môže odoslať tento JWT používateľovi.

Ako JWT chráni naše údaje?

Je dôležité pochopiť, že účelom použitia JWT je NIE akýmkoľvek spôsobom skryť alebo zakryť údaje. Dôvodom, prečo sa používajú JWT, je dokázať, že odoslané údaje boli skutočne vytvorené autentickým zdrojom.

Ako je ukázané v predchádzajúcich krokoch, údaje vo vnútri JWT sú zakódované a podpísané , nie šifrované . Účelom kódovania údajov je transformácia štruktúry údajov. Podpisovanie údajov umožňuje príjemcovi údajov overiť pravosť zdroja údajov. Kódovanie a podpisovanie údajov teda údaje nezabezpečuje. Na druhej strane hlavným účelom šifrovania je zabezpečiť údaje a zabrániť neoprávnenému prístupu.

Pretože JWT sú iba podpísané a kódované a pretože JWT nie sú šifrované, JWT nezaručuje žiadne zabezpečenie citlivých údajov. ## Krok 5. Overenie JWT

V našom jednoduchom príklade troch entít používame ** JWT **, ktorý je podpísaný algoritmom ** HS256 **, kde tajný kľúč pozná iba autentifikačný server a aplikačný server. Keď aplikácia nastaví svoj autentifikačný proces, aplikačný server dostane tajný kľúč od autentifikačného servera. Pretože aplikácia pozná tajný kľúč, keď používateľ uskutoční volanie aplikácie API pripojené k JWT, aplikácia môže vykonať rovnaký podpisový algoritmus ako v kroku 3 na JWT. Aplikácia potom môže overiť, či sa podpis získaný z vlastnej operácie hashovania zhoduje s podpisom na samotnom JWT (t. J. Zhoduje sa s podpisom JWT vytvoreným autentifikačným serverom). Ak sa podpisy zhodujú, znamená to, že JWT je platný, čo znamená, že volanie rozhrania API pochádza z autentického zdroja. V opačnom prípade, ak sa podpisy nezhodujú, znamená to, že prijatý JWT je neplatný, čo môže byť indikátorom potenciálneho útoku na aplikáciu. Overením JWT teda aplikácia dodáva vrstvu dôvery medzi seba a používateľa.

Na záver

Prešli sme si, čo sú JWT, ako sú vytvárané a overované a ako ich možno použiť na zaistenie dôvery medzi aplikáciou a jej používateľmi. Toto je východiskový bod pre pochopenie základov JWT a prečo sú užitočné. JWT sú len jedným kúskom skladačky na zaistenie dôvery a bezpečnosti vo vašej aplikácii.

Je potrebné poznamenať, že nastavenie autentifikácie JWT popísané v tomto článku používa algoritmus symetrického kľúča (HS256). Svoje overenie JWT môžete tiež nastaviť podobným spôsobom, okrem použitia asymetrického algoritmu (napríklad RS256), kde autentifikačný server má tajný kľúč a aplikačný server má verejný kľúč.

#bezpečnosť #javascript

Pozri Tiež: