Junior
Kas ir JWT (JSON Web Token)?
sobes.tech AI
Atbilde no AI
JSON Web Token (JWT) — tas ir kompakts, URL drošs datu pārraides veids starp pusēm JSON formātā.
Darba principi:
-
Tokens sastāv no trim daļām, kas atdalītas ar punktiem (
.):header.payload.signature. -
Header (Galvene): Satur metadatus par tokenu, piemēram, tokena tipu (JWT) un paraksta algoritmu (piemēram, HS256, RS256).
{ "alg": "HS256", "typ": "JWT" } -
Payload (Nesība): Satur "claims" - apgalvojumus vai informāciju, ko vēlamies nodot. Ir vairāki veidi:
- Reģistrētie claims: Rezervēti, bet opcioni claims, piemēram,
iss(izdevējs),exp(derīguma termiņš),sub(temats). - Publiskie claims: Definēti publiskai lietošanai, jāreģistrē IANA JSON Web Token Registry vai jābūt URI ar nosaukuma telpu, kas ir aizsargāta pret kolīzijām.
- Privātie claims: Nejauši apgalvojumi, kas saskaņoti starp pusēm.
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } - Reģistrētie claims: Rezervēti, bet opcioni claims, piemēram,
-
Paraksts: Izveidots, apvienojot kodētas galvenes un nesības ar slepeno atslēgu un paraksta algoritmu, kas norādīts galvenē. Tas nodrošina tokena integritāti - ja kāds mainīs galveni vai nesību, paraksts kļūs nederīgs.
# Parauga paraksta izveide ar HS256 import hmac, hashlib header_str = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' # Base64Url(Galvene) payload_str = 'eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ' # Base64Url(Nesība) secret = 'your_secret_key' # Paraksts = HMACSHA256(Base64Url(Galvene) + "." + Base64Url(Nesība), slepenā atslēga) signature = hmac.new( secret.encode('utf-8'), (header_str + '.' + payload_str).encode('utf-8'), hashlib.sha256 ).digest() # Kodēšana Base64Url import base64 signature_b64url = base64.urlsafe_b64encode(signature).rstrip(b'=').decode('ascii') # Gala tokens: header_str + '.' + payload_str + '.' + signature_b64url
Pielietojums:
- Autorizācija: Serveris izdod tokenu lietotājam pēc veiksmīgas autentifikācijas. Lietotājs nosūta šo tokenu ar katru pieprasījumu. Serveris pārbauda tokena derīgumu un atļauj piekļuvi resursiem.
- Informācijas apmaiņa: Droša nelielu datu apmaiņa starp dažādiem pakalpojumiem.
Priekšrocības:
- Kompaktums: Mazāk datu pārraidē salīdzinājumā ar XML.
- Pašpietiekamība: Tokenā jau ir nepieciešamā informācija par lietotāju, kas samazina nepieciešamību piekļūt datu bāzei katrā pieprasījumā.
- Stateless: Serverim nav jāuztur sesijas informācija savā pusē.
- Kriptogrāfiska parakstīšana: Nodrošina datu integritāti.
Trūkumi:
- Tokena atsaukšana nav iespējama: Pēc izdošanas tokens darbojas līdz derīguma termiņa beigām, ja nav ieviests melno sarakstu mehānisms.
- Slepenās atslēgas glabāšana: Jāglabā droši.
- Izmērs: Ar datu apjoma pieaugumu
payloadpalielinās tokena izmērs.