Wat is JWT (JSON Web Token)?
sobes.tech AI
Antwoord van AI
JSON Web Token (JWT) is een compacte, veilige manier om gegevens tussen partijen over te dragen in JSON-formaat.
Werking principes:
-
Het token bestaat uit drie delen, gescheiden door punten (
.):header.payload.signature. -
Header (Koptekst): Bevat metadata over het token, zoals het type token (JWT) en de gebruikte ondertekeningsalgoritme (bijvoorbeeld HS256, RS256).
{ "alg": "HS256", "typ": "JWT" } -
Payload (Lading): Bevat "claims" - beweringen of informatie die we willen overdragen. Er zijn verschillende types:
- Geregistreerde claims: Gereserveerde, maar optionele claims zoals
iss(uitgever),exp(verlooptijd),sub(onderwerp). - Publieke claims: Voor algemeen gebruik, moeten geregistreerd zijn in de IANA JSON Web Token Registry of URI's bevatten met een beschermde naamruimte tegen conflicten.
- Privé claims: Arbitrary beweringen overeengekomen tussen partijen.
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } - Geregistreerde claims: Gereserveerde, maar optionele claims zoals
-
Handtekening (Signature): Gemaakt door de gecodeerde header en payload te combineren met een geheim en het algoritme dat in de header is gespecificeerd. Dit garandeert de integriteit van het token; als iemand de header of payload wijzigt, wordt de handtekening ongeldig.
# Voorbeeld van het maken van een handtekening met HS256 import hmac, hashlib header_str = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' # Base64Url(Header) payload_str = 'eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ' # Base64Url(Payload) secret = 'your_secret_key' # Handtekening = HMACSHA256(Base64Url(Header) + "." + Base64Url(Payload), secret) signature = hmac.new( secret.encode('utf-8'), (header_str + '.' + payload_str).encode('utf-8'), hashlib.sha256 ).digest() # Codering van de handtekening in Base64Url import base64 signature_b64url = base64.urlsafe_b64encode(signature).rstrip(b'=').decode('ascii') # Eindtoken: header_str + '.' + payload_str + '.' + signature_b64url
Toepassingen:
- Authenticatie: De server geeft het token uit aan de gebruiker na succesvolle authenticatie. De gebruiker stuurt dit token bij elke aanvraag. De server controleert de geldigheid van het token en verleent toegang tot bronnen.
- Gegevensuitwisseling: Veilige overdracht van kleine hoeveelheden gegevens tussen verschillende services.
Voordelen:
- Compact: Minder gegevens om te verzenden in vergelijking met XML.
- Zelfvoorzienend: Het token bevat al de benodigde informatie over de gebruiker, wat de noodzaak vermindert om bij elke aanvraag de database te raadplegen.
- Stateloos: De server hoeft geen sessie-informatie op te slaan.
- Cryptografische handtekening: Zorgt voor de integriteit van de gegevens.
Nadelen:
- Het token kan niet worden ingetrokken: Eenmaal uitgegeven, blijft het token geldig tot het verloopt, tenzij een mechanisme voor zwarte lijsten wordt geïmplementeerd.
- Opslag van het geheim: De geheime sleutel moet veilig worden opgeslagen.
- Grootte: Met toenemende gegevens in
payloadneemt de grootte van het token ook toe.