JSON web token

JSON Web Token (JWT)
Az első változat kelte 2015. május
Szerző M. Jones, J. Bradley és N. Sakimura
Fejlesztő IETF
Szabványok RFC  7519
Weboldal jwt.io

A JSON Web Token (JWT) az RFC  7519-ben meghatározott nyílt szabvány. Lehetővé teszi a tokenek biztonságos cseréjét több fél között. A csere ezen biztonsága tükröződik az adatok integritásának és hitelességének ellenőrzésében . A HMAC vagy RSA algoritmus hajtja végre .

Szerkezet

A token három részből áll:

Online eszközök vannak azok megfejtésére.

Példa

A fejedben

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

Hasznos teher

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

A fenti példában a fejlécben látjuk, hogy a token JSON web-token (JWT), és hogy az aláírásra használt algoritmus a HMAC-SHA512.

Az aláírás megszerzése

Az aláírás megszerzéséhez először külön kell kódolni a fejlécet és a hasznos terhet az RFC  4648- ban definiált Base64url-lel. Ezután összefűzzük őket úgy, hogy elválasztjuk őket egy ponttal. Ennek az eredménynek az aláírását kapjuk meg a választott algoritmussal. Ezt az aláírást ugyanúgy hozzáadják az eredményhez (kódolva és ponttal elválasztva).

Ne feledje, hogy a Base64url kódoláshoz a '=' kitöltő karakter nem kötelező, és nem fogja használni a JSON Web Token létrehozásakor az URL-ben történő továbbítás megkönnyítésére.

Lépésről lépésre

A fenti példából következik a JSON web Token megszerzésének különböző lépése.

Fejléc kódolása

eyJ0eXAiOiAiand0IiwgImFsZyI6ICJIUzUxMiJ9

Hasznos kódolás

eyJuYW1lIjoiV2lraXBlZGlhIiwiaWF0IjoxNTI1Nzc3OTM4fQ

A két elem összefűzése, ponttal elválasztás

eyJ0eXAiOiAiand0IiwgImFsZyI6ICJIUzUxMiJ9.eyJuYW1lIjoiV2lraXBlZGlhIiwiaWF0IjoxNTI1Nzc3OTM4fQ

Az üzenet hitelesítési kódjának megszerzése a HMAC-SHA512 algoritmussal.

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

Kódkódolás (mindig a Base64url-lel )

iu0aMCsaepPy6ULphSX5PT32oPvKkM5dPl131knIDq9Cr8OUzzACsuBnpSJ_rE9XkGjmQVawcvyCHLiM4Kr6NA

A két elem összefűzése, ponttal elválasztás

eyJ0eXAiOiAiand0IiwgImFsZyI6ICJIUzUxMiJ9.eyJuYW1lIjoiV2lraXBlZGlhIiwiaWF0IjoxNTI1Nzc3OTM4fQ.iu0aMCsaepPy6ULphSX5PT32oPvKkM5dPl131knIDq9Cr8OUzzACsuBnpSJ_rE9XkGjmQVawcvyCHLiM4Kr6NA

Normál mezők ( követelések )

A JWT specifikáció különféle szabványos mezőket (vagy paramétereket) kínál, igénypontoknak hívva  :

  • iss  : a token készítője ( kibocsátója )
  • Sub  : a token tárgya ( tárgya )
  • aud  : token közönség
  • exp  : a token lejárati ideje
  • nbf  : dátum, amely előtt a tokent nem lehet érvényesnek tekinteni ( nem korábban )
  • iat  : a token létrehozásának dátuma ( kibocsátás időpontja :)
  • jti  : a token egyedi azonosítója ( JWT ID )

Ezek a paraméterek nem kötelezőek. Egyszerűen lehetővé teszik egy token pontosabb meghatározását, és megerősítik annak biztonságát ( például egy token élettartamának korlátozásával).

Végrehajtás

A JWT megvalósítása számos programozási nyelven elérhető könyvtár sokaságán keresztül valósítható meg.

Itt van egy nem teljes lista azokról a programozási nyelvekről, amelyekhez JWT könyvtár tartozik: .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 .

Az RFC  7519 specifikáció maga is megvalósíthatja a JWT leírását.

Sebezhetőségek

A JWT-k a hitelesítés biztonságos eszközei. Vannak azonban olyan sérülékenységek, amelyek megelőzhetőek, ha körültekintően mérlegelik őket. Itt van egy nem teljes lista:

  • A JWT kódolható vagy titkosítható. A csak kódolt JWT-nek, mint a forgalomban lévő JWT-k többségének, át kell mennie egy biztonságos kommunikációs protokollon ( azaz HTTPS), hogy egy esetleges kém vagy rosszindulatú felhasználó használhassa, akinek sikerült elfognia.
  • A titkos kulcsot rendkívül biztonságban kell tartani. Bármely felhasználó (vagy rendszer), aki rendelkezik egy szerver titkos kulcsával, képes létrehozni a JWT-ket, amelyeket a szerver érvényesnek ismer el.

Megjegyzések és hivatkozások

  1. (a) "  Web JSON Token (JWT)  ," Request for Comments n o  7519.
  2. (in) "  Jwt eszköz  "
  3. (a) "  A Base16, Base32, és Base64 adatok kódolások  " Request for Comments n o  4648.
  4. (hu-USA) auth0.com , „  JWT.IO - JSON Web Tokens Introduction  ” , a jwt.io címen (hozzáférés : 2018. május 8. )
  5. (in) John Bradley és Nat Sakimura , "  Web JSON Token (JWT)  " szóló tools.ietf.org (elérhető június 22, 2020 )
  6. https://jwt.io/#libraries-io
  7. „  JSON Web Token (JWT): A teljes útmutató  ” , a primfx.com címen ,2020. június 19(megtekintés : 2020. június 22. )

Lásd is