Naar de inhoud
HexSlate

JWT Decoder

Plak een token om het te decoderen.

Deze tool decodeert, maar verifieert nietEen handtekening verifiëren vraagt om het ondertekengeheim of de publieke sleutel, waar deze tool niet om vraagt. Behandel elke claim hieronder als niet-geverifieerd totdat de JWT-bibliotheek van je backend de handtekening controleert.

Plak een token om het te decoderen

De header, payload en vervalstatus verschijnen terwijl je typt.

Base64url, geen base64

De drie segmenten van een JWT (RFC 7519) gebruiken - en _ in plaats van + en /, zonder = padding (RFC 4648 §5). Ze decoderen naar bytes, en die bytes zijn UTF-8. Een naïeve decode die één byte per teken leest, maakt van een naam met een accent, een niet-Latijns schrift of een emoji in een eigen claim onleesbare tekens. Deze decodeert via een UTF-8-bytedecoder.

Veelvoorkomende problemen

  • De hele Authorization-header geplakt.Bearer eyJhbGci... is een headerwaarde, geen token. Het voorvoegsel gaat mee het eerste segment in, en wordt dus gemeld als een header die geen geldige base64url is. Haal Bearer weg en de rest decodeert.
  • Gewone base64 in plaats van base64url. Een opnieuw gecodeerd token kan +, / of een = aan het eind bevatten. Niet geldig in een JWT-segment, en dat wordt gemeld in plaats van gerepareerd.
  • exp, iat of nbf als tekst getoond, niet als datum. RFC 7519 §2 definieert deze als NumericDate: seconden sinds de epoch als JSON-getal. Een uitgever die er een ISO-string van maakt, wijkt af van de spec.
  • Eerder verlopen dan verwacht. Gecontroleerd tegen de klok van je apparaat, zonder speling. Echte verifiers staan meestal een minuut of twee afwijking toe, dus dit is het strenge antwoord, niet het milde dat je API geeft.

Veelgestelde vragen

Waarom controleert deze tool de handtekening niet?

Daarvoor is het geheim van de uitgever nodig (HMAC, zoals HS256) of de publieke sleutel (RSA of ECDSA, zoals RS256). Een pagina in je browser heeft voor geen van beide een veilige plek: een symmetrisch geheim dat je in een webformulier typt, is een geheim dat die pagina kan lekken. Verifieer aan de serverkant, waar de sleutel staat.

Wat is het verschil tussen een JWT, een JWS en een JWE?

JWT is het algemene formaat. Een ondertekende JWT, het enige soort dat dit leest, is een JWS Compact Serialization: drie segmenten. Een versleuteld token is een JWE (RFC 7516), vijf segmenten met versleutelde tekst als payload, en zonder de sleutel decodeert er niets.

Is het veilig om hier een token te plakken?

Het token verlaat je browser niet: het wordt in dit tabblad gedecodeerd en komt niet in de URL of in opslag. Behandel elk token dat je ergens anders hebt geplakt wel als blootgesteld, en onthoud dat een JWT een bearer credential is: wie hem heeft, kan hem gebruiken tot hij verloopt.

Wat betekent exp precies?

Seconden sinds de Unix epoch, geen milliseconden, en dat is de meest gemaakte fout bij tokens die met de hand geschreven worden: een millisecondewaarde legt de verloopdatum ruwweg vijftigduizend jaar vooruit. De spec staat ook een kleine klokafwijking toe, dus een token kan als verlopen geweigerd worden door een server waarvan de klok iets voorloopt op de jouwe.