Header
a JWT header az aláíráshoz és kódoláshoz használt token típusból és algoritmusból áll. Az algoritmusok lehetnek HMAC, SHA256, RSA, HS256 vagy RS256.
{
"typ": "JWT",
"alg": "HS256"
}
hasznos teher
a hasznos teher az igényként hívott munkamenet-adatokból áll. Az alábbiakban felsorolunk néhány a standard állítások, hogy tudjuk használni,
- kibocsátó(ISS)
- tárgy (Al)
- közönség (aud)
- lejárati idő (exp)
- kibocsátva (iat)
{
"sub": "user10001",
"iat": 1569302116
}
az egyéni igények is szerepelhetnek a követeléskészletben. Egyéni követeléskészletek használata esetén,
- ne tegyen nagy adatokat a követeléskészletekbe. Követelés készletek azt jelentette, hogy kompakt.
- ne tegyen érzékeny információkat, mivel a JWT könnyen dekódolható.
{
"sub": "user10001",
"iat": 1569302116,
"role": "admin",
"user_id": "user10001"
}
aláírás
az aláírás a JSON Web Token(JWT) legfontosabb része. Az aláírást a fejléc és a hasznos adat Base64url kódolással történő kódolásával számítják ki, majd egy pontelválasztóval összefűzik őket. Amelyet ezután a kriptográfiai algoritmusnak adnak.
// signature algorithm
data = base64urlEncode( header ) + "." + base64urlEncode( payload )signature = HMAC-SHA256( data, secret_salt )
tehát amikor a fejléc vagy a hasznos teher megváltozik, az aláírást újra ki kell számítani. Csak az identitásszolgáltató (IdP) rendelkezik a privát kulccsal az aláírás kiszámításához, amely megakadályozza a token manipulálását.
hogyan működik?
alapvetően az identitásszolgáltató (IdP) generál egy JWT-t, amely tanúsítja a felhasználói identitást, és az erőforrás-kiszolgáló dekódolja és ellenőrzi a token hitelességét titkos salt / nyilvános kulcs segítségével.
- felhasználói bejelentkezés felhasználónév és jelszó vagy google/facebook használatával.
- az Authentication server ellenőrzi a hitelesítő adatokat, és titkos salt vagy privát kulcs használatával aláírja a jwt-t.
- a felhasználó kliense a JWT-t használja a védett erőforrások eléréséhez a JWT HTTP engedélyezési fejlécben történő átadásával.
- Resource server ezután ellenőrzi a token hitelességét a titkos salt/ nyilvános kulcs segítségével.