JSON Web Token

JSON Web Token (JWT)
Dato for første versjon Mai 2015
Forfatter M. Jones, J. Bradley og N. Sakimura
Utvikler IETF
Standarder RFC  7519
Nettsted jwt.io

JSON Web Token (JWT) er en åpen standard definert i RFC  7519. Den muliggjør sikker utveksling av tokens mellom flere parter. Denne utvekslingssikkerheten gjenspeiles i verifiseringen av dataintegriteten og ektheten . Det utføres av HMAC- eller RSA-algoritmen .

Struktur

Et token består av tre deler:

Det finnes elektroniske verktøy for å tyde dem.

Eksempel

I tankene dine

{"typ": "jwt", "alg": "HS512"}

Nyttelast

{"name":"Wikipedia", "iat":1525777938}

I eksemplet ovenfor ser vi i overskriften at tokenet er et JSON Web Token (JWT) og at algoritmen som brukes til signering er HMAC-SHA512.

Motta signaturen

For å få signaturen, må vi først kode toppteksten og nyttelasten med Base64url definert i RFC  4648. Deretter sammenkoble vi dem ved å skille dem med en periode. Vi får signaturen til dette resultatet med den valgte algoritmen. Denne signaturen blir lagt til resultatet på samme måte (kodet og atskilt med en periode).

Merk at for Base64url- koding er ikke fyllertegnet '=' obligatorisk og vil ikke bli brukt til å lage JSON Web Token for å lette overføring i en URL.

Trinnvis fremgangsmåte

Fra eksemplet ovenfor er her de forskjellige trinnene for å skaffe et JSON Web Token.

Topptekstkoding

eyJ0eXAiOiAiand0IiwgImFsZyI6ICJIUzUxMiJ9

Nyttelastkoding

eyJuYW1lIjoiV2lraXBlZGlhIiwiaWF0IjoxNTI1Nzc3OTM4fQ

Sammenkobling av de to elementene, separasjon med et punkt

eyJ0eXAiOiAiand0IiwgImFsZyI6ICJIUzUxMiJ9.eyJuYW1lIjoiV2lraXBlZGlhIiwiaWF0IjoxNTI1Nzc3OTM4fQ

Å skaffe meldingsautentiseringskoden med HMAC-SHA512-algoritmen.

HMACSHA512(concatenation, 'ma super clé secrète')

Kodekoding (alltid med Base64url )

iu0aMCsaepPy6ULphSX5PT32oPvKkM5dPl131knIDq9Cr8OUzzACsuBnpSJ_rE9XkGjmQVawcvyCHLiM4Kr6NA

Sammenkobling av de to elementene, separasjon med et punkt

eyJ0eXAiOiAiand0IiwgImFsZyI6ICJIUzUxMiJ9.eyJuYW1lIjoiV2lraXBlZGlhIiwiaWF0IjoxNTI1Nzc3OTM4fQ.iu0aMCsaepPy6ULphSX5PT32oPvKkM5dPl131knIDq9Cr8OUzzACsuBnpSJ_rE9XkGjmQVawcvyCHLiM4Kr6NA

Standard felt ( krav )

JWT-spesifikasjonen tilbyr forskjellige standardfelt (eller parametere), kalt krav  :

  • iss  : skaper ( utsteder ) av tokenet
  • Sub  : emne ( emne ) til tokenet
  • aud  : token publikum
  • exp  : utløpsdato for token
  • nbf  : dato som token ikke må anses som gyldig ( ikke før )
  • iat  : datoen token ble opprettet ( utstedt kl. )
  • jti  : unik identifikator for tokenet ( JWT ID )

Alle disse parametrene er valgfrie. De lar bare et token defineres mer presist og forsterker dets sikkerhet ( f.eks. Ved å begrense et tokens levetid).

Gjennomføring

Implementeringen av JWT kan gjøres gjennom en mengde biblioteker tilgjengelig på mange programmeringsspråk.

Her er en ikke-uttømmende liste over programmeringsspråk som det finnes et JWT-bibliotek for: .NET , 1C , Ada , C , C ++ , Clojure , Crystal , D , Delphi , Elixir , Erlang , Go , Groovy , Haskell , Haxe , Java , JavaScript , kdb + / Q , Kotlin , Lua , Node.js , Objective-C , Perl , PHP , PostgreSQL , Python , Ruby , Rust , Scala , Swift .

Det er også mulig å implementere RFC  7519- spesifikasjonen som beskriver JWT selv .

Sårbarheter

JWT er et sikkert middel for autentisering. Det er imidlertid visse sårbarheter som kan forhindres ved å vurdere dem med omhu. Her er en ikke-uttømmende liste:

  • En JWT kan enten være kodet eller kryptert. En JWT som bare er kodet, slik tilfellet er med de fleste JWT-er i omløp, må derfor passere gjennom en sikker kommunikasjonsprotokoll ( dvs. HTTPS) slik at den er ubrukelig av en mulig spion eller ondsinnet bruker som har klart å fange den.
  • Den hemmelige nøkkelen må holdes ekstremt sikker. Enhver bruker (eller system) som har en serverens hemmelige nøkkel, vil kunne generere JWT-er som er anerkjent som gyldige av denne serveren.

Merknader og referanser

  1. (in) "  Web JSON Token (JWT)  ," Forespørsel om kommentarer nr .  7519.
  2. (in) "  Jwt Tool  "
  3. (in) "  Base16, Base32 og Base64 Data Encodings  " Forespørsel om kommentarer nr .  4648.
  4. (en-US) auth0.com , “  JWT.IO - JSON Web Tokens Introduction  ” , på jwt.io (åpnet 8. mai 2018 )
  5. (i) John Bradley og Nat Sakimura , "  Web JSON Token (JWT)  "tools.ietf.org (åpnes 22 juni 2020 )
  6. https://jwt.io/#libraries-io
  7. “  JSON Web Token (JWT): The Complete Guide  ” , på primfx.com ,19. juni 2020(åpnet 22. juni 2020 )

Se også