JSON Web Token egy szabványos létrehozásához használt hozzáférési tokenek egy alkalmazás.
Ez így működik: a szerver létrehoz egy tokent, amely igazolja a felhasználó személyazonosságát, majd elküldi az ügyfélnek.
az ügyfél minden további kérés esetén visszaküldi a tokent a kiszolgálónak, így a kiszolgáló tudja, hogy a kérés egy adott identitásból származik.
Ez az architektúra nagyon hatékonynak bizonyul a modern webes alkalmazásokban, ahol a felhasználó hitelesítése után API kéréseket hajtunk végre egy REST vagy egy GraphQL API számára.
Ki használja a JWT-t?, Például a Google. Ha a Google API-kat használja, akkor a JWT-t fogja használni.
A JWT a támadó aláírt (de nem titkosított, ezért HTTPS kötelező, amikor a felhasználói adatok tárolása a JWT), így nincs garancia, hogy bízhatunk, amikor megkapjuk, mint közvetítő elfoghatja, illetve módosításához, vagy az adatok birtokában, anélkül, hogy hatálytalanító.
Ez azt jelenti, hogy a JWTs-t gyakran kritizálják túlzott használatuk miatt, különösen azért, mert kevésbé problémás megoldásokat lehet használni.
meg kell alkotnia véleményét a téma körül., Nem támogatom a technológiát egy másikkal szemben, csak bemutatom az összes lehetőséget és eszközt, ami az Ön rendelkezésére áll.
mire jók? Elsősorban API-hitelesítés, valamint szerver-kiszolgálói engedélyezés.
hogyan jön létre egy JWT token?
csomópont használata.,js a token első részét ezzel a kóddal generálhatja:
const header = { "alg": "HS256", "typ": "JWT" }const encodedHeader = Buffer.from(JSON.stringify(header)).toString('base64')
az aláírási algoritmust HMAC SHA256
(a JWT több algoritmust támogat), majd létrehozunk egy puffert ebből a kódból JSON-kódolt objektum, és a Base64 segítségével kódoljuk.
a részleges eredmény eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
ezután hozzáadjuk a hasznos terhet, amelyet bármilyen adatokkal testreszabhatunk., Vannak fenntartott kulcsok, köztük aiss
és aexp
, amelyek azonosítják a kibocsátót és a token lejárati idejét.
felveheti a saját adatok a token használatával tárgy:
const payload = { username: 'Flavio' }
Mi átalakítani ezt a tárgyat, JSON-kódolt, hogy egy Puffer, mi kódolja az eredmény használata base64, ahogy eddig is:
const encodedPayload = Buffer.from(JSON.stringify(payload)).toString('base64')
ebben Az esetben a részleges eredmény eyJ1c2VybmFtZSI6IkZsYXZpbyJ9
.,
ezután aláírást kapunk a fejlécről és a hasznos teher tartalomról, amely biztosítja, hogy a tartalom nem módosítható, még akkor sem, ha elfogják, mivel az aláírásunk érvénytelenné válik. Ehhez a crypto
csomópont modult használjuk:
használjuk a secretKey
titkos kulcsot, és létrehozunk egy Base64 kódolt ábrázolást a titkosított aláírásról.,
Az érték az aláírás az ügy
MQWECYWUT7bayj8miVgsj8KdYI3ZRVS+WRRZjfZrGrw=
már majdnem kész Vagyunk, csak meg kell összefűzni a 3 rész a fejléc, hasznos aláírása az azokat elválasztó pont:
const jwt = `${encodedHeader}.${encodedPayload}.${signature}`
API hitelesítés
Ez talán az egyetlen értelmes módon használni JWT.
egy közös forgatókönyv: feliratkozol egy szolgáltatásra, és letölt egy JWT-t a szolgáltatás irányítópultjáról. Ez az, amit mostantól használni fog, hogy hitelesítse az összes kérését a kiszolgálóra.,
egy másik használati eset, amely éppen ellenkezőleg, elküldi a JWT-t, amikor az API-t kezeli, és az ügyfelek csatlakoznak hozzád, és azt akarja, hogy a felhasználók a következő kéréseket küldjék el a token átadásával.
ebben az esetben az ügyfélnek valahol tárolnia kell a tokent. Hol van a legjobb hely? Egy HttpOnly cookie-ban. A többi módszer mind hajlamos az XSS támadásokra, ezért ezeket el kell kerülni. A HttpOnly cookie nem érhető el a Javascriptből, ezért minden kérés esetén automatikusan az origin szerverre kerül, így tökéletesen megfelel a használati esetnek.,
válassza ki a legjobb JWT könyvtárat
a használt nyelvtől és környezettől függően számos könyvtár közül választhat. A legnépszerűbbek a következők jwt.io weboldal.
ne használja a JWTs-t munkamenet-tokenekként
nem szabad JWTs-t használni a munkamenetekhez. Használjon rendszeres szerver oldali munkamenet-mechanizmust, mivel sokkal hatékonyabb és kevésbé hajlamos az adatexpozícióra.