Junior
Mis on JWT (JSON Web Token)?
sobes.tech AI
Vastus AI-lt
JSON Web Token (JWT) on kompaktne, URL-i turvaline viis andmete vahetamiseks osapoolte vahel JSON-formaadis.
Tööpõhimõtted:
-
Token koosneb kolmest osast, mis on eraldatud punktidega (
.):header.payload.signature. -
Header (Päis): Sisaldab metaandmeid tokeni kohta, näiteks tokeni tüüp (JWT) ja kasutatud allkirjastamise algoritm (näiteks HS256, RS256).
{ "alg": "HS256", "typ": "JWT" } -
Payload (Sisu): Sisaldab "claims" - väiteid või teavet, mida soovime edastada. On erinevat tüüpi:
- Registreeritud claims: Reserveeritud, kuid valikulised claims, näiteks
iss(väljaandja),exp(kehtivusaeg),sub(teema). - Avalikud claims: Määratletud avalikuks kasutamiseks, peavad olema registreeritud IANA JSON Web Token Registrys või olema URI, mis sisaldab nimelahendust, mis on kaitstud kokkulangevuste eest.
- Privaatsed claims: Juhuslikud väited, mis on osapoolte vahel kooskõlastatud.
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } - Registreeritud claims: Reserveeritud, kuid valikulised claims, näiteks
-
Allkiri: Loobutakse kombineerides kodeeritud päise ja sisu koos salajase võtme ja päise algoritmiga, mis on märgitud päises. See tagab tokeni terviklikkuse - kui keegi muudab päise või sisu, muutub allkiri kehtetuks.
# Näide allkirja loomise kohta HS256 kasutades import hmac, hashlib header_str = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' # Base64Url(Päis) payload_str = 'eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ' # Base64Url(Nesõn) secret = 'your_secret_key' # Allkiri = HMACSHA256(Base64Url(Päis) + "." + Base64Url(Nesõn), salajane) signature = hmac.new( secret.encode('utf-8'), (header_str + '.' + payload_str).encode('utf-8'), hashlib.sha256 ).digest() # Kodeerimine Base64Url import base64 signature_b64url = base64.urlsafe_b64encode(signature).rstrip(b'=').decode('ascii') # Lõplik token: header_str + '.' + payload_str + '.' + signature_b64url
Rakendused:
- Autentimine: Server väljastab tokeni kasutajale pärast edukat autentimist. Kasutaja saadab selle tokeni iga päringuga. Server kontrollib tokeni kehtivust ja lubab juurdepääsu ressurssidele.
- Teabe vahetamine: Turvaline väikeste andmemahtude edastamine erinevate teenuste vahel.
Eelised:
- Kompaktsus: Vähem andmeid edastamiseks võrreldes XML-iga.
- Iseseisvus: Tokenis juba sisaldub vajalik teave kasutaja kohta, mis vähendab vajadust andmebaidile iga päringu puhul pöördumiseks.
- Stateless: Server ei pea hoidma seansi teavet oma poolel.
- Krüptograafiline allkiri: Tagab andmete terviklikkuse.
Puudused:
- Tokeni tühistamine pole võimalik: Pärast väljastamist kehtib token kuni selle kehtivusaja lõpuni, kui pole rakendatud musta nimekirja mehhanismi.
- Saladuse hoidmine: Salajane võti peab olema turvaliselt hoitud.
- Suurus: Datu maht
payloadsuureneb, kui andmete maht suureneb.