Mi az a JWT (JSON Web Token)?
sobes.tech MI
Válasz az MI-től
A JSON Web Token (JWT) kompakt, URL-biztonságos módja az adatok továbbításának két fél között JSON formátumban.
Működési elvek:
-
A token három részből áll, pontokkal elválasztva (
.):header.payload.signature. -
Fejléc (Header): Metaadatokat tartalmaz a tokenről, például a token típusát (JWT) és az aláírási algoritmust (pl. HS256, RS256).
{ "alg": "HS256", "typ": "JWT" } -
Payload (Tartalom): "claims" - állításokat vagy információkat tartalmaz, amelyeket továbbítani szeretnénk. Több típusuk is van:
- Regisztrált claims: Foglalt, de opcionális claims, mint például
iss(kiadó),exp(lejárati idő),sub(téma). - Nyilvános claims: Nyilvános használatra meghatározottak, regisztrálni kell az IANA JSON Web Token Registry-ben vagy URI-t kell tartalmazni, amely névteret véd a konfliktusoktól.
- Privát claims: Szabadon megállapított állítások, amelyek a felek között egyeznek meg.
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } - Regisztrált claims: Foglalt, de opcionális claims, mint például
-
Aláírás (Signature): A kódolt fejléc és tartalom kombinálásával, titkos kulcs és a fejlécben megadott algoritmus használatával jön létre. Ez biztosítja a token integritását - ha valaki megváltoztatja a fejlécet vagy a tartalmat, az aláírás érvénytelen lesz.
# Aláírás létrehozásának példája HS256 használatával import hmac, hashlib header_str = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' # Base64Url(Header) payload_str = 'eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ' # Base64Url(Payload) secret = 'your_secret_key' # Aláírás = HMACSHA256(Base64Url(Header) + "." + Base64Url(Payload), secret) signature = hmac.new( secret.encode('utf-8'), (header_str + '.' + payload_str).encode('utf-8'), hashlib.sha256 ).digest() # Aláírás kódolása Base64Url-be import base64 signature_b64url = base64.urlsafe_b64encode(signature).rstrip(b'=').decode('ascii') # Végső token: header_str + '.' + payload_str + '.' + signature_b64url
Alkalmazás:
- Hitelesítés: A szerver a sikeres azonosítás után adja ki a tokent a felhasználónak. A felhasználó minden kérésnél elküldi ezt a tokent. A szerver ellenőrzi a token érvényességét és engedélyezi a hozzáférést.
- Információcsere: Biztonságos adatátvitel különböző szolgáltatások között.
Előnyök:
- Kompakt: Kevesebb adat a továbbításhoz, mint XML esetén.
- Önálló: A token már tartalmazza a felhasználó szükséges adatait, csökkentve a adatbázis elérésének szükségességét minden kérésnél.
- Stateless: A szerver nem kell, hogy tárolja a munkamenet információkat.
- Kriptográfiai aláírás: Biztosítja az adatok integritását.
Hátrányok:
- Nem lehet visszavonni a tokent: A kiadás után a token az érvényességi idő végéig érvényes, kivéve, ha blacklist mechanizmust valósítanak meg.
- Titkos kulcs tárolása: A titkos kulcsot biztonságosan kell tárolni.
- Méret: A
payloadadatmennyiség növekedésével a token mérete is nő.