JSON Web Token (JWT, МФА: [dʒɒt], вимовляється "джот"[1]) це стандарт токена доступу на основі JSON, стандартизованого в RFC 7519. Як правило, використовується для передачі даних для аутентифікації в клієнт-серверних програмах. Токени створюються сервером, підписуються секретним ключем і передаються клієнту, який надалі використовує цей токен для підтвердження своєї особи.
Структура
Токен JWT складається з трьох частин: заголовка (header), корисного навантаження (payload) та підпису або даних шифрування. Перші два елементи – це JSON об'єкти певної структури. Третій елемент обчислюється на основі перших і залежить від обраного алгоритму (у разі використання непідписаного JWT може бути опущений).
Заголовок
Заголовок (Header) це JSON елемент, що описує до якого типу належить даний токен і які методи шифрування використовувались.
Поле
Назва
Значення
typ
Type
Описує медіатип IANA Medientyp токену. В даному випадку JWT завжди мають медіатипapplication/jwt.
cty
Content Type
Це поле встановлюється коли JWT містить в собі інший JWT, в противному разі це поле пропускається.
alg
Algorithm
Описує використаний алгоритм шифрування. Зазвичай використовують HMAC з SHA-256 (HS256) або RSA з SHA-256 (RS256). Можна також не використовувати жодного шифрування, вказавши none, але це не рекомендується. Можливі значення вказуються в стандарті JSON Web Encryption (JWE) RFC 7516.
Заголовок може наприклад виглядати так:
{"alg":"HS256","typ":"JWT"}
Вміст
Вміст (англ.Payload) складається з елемента JSON, який описує твердження.
Унікальна, чутлива до регістру послідовність символів, яка однозначно ідентифікує токен. Може застосовуватись для запобігання повторному використанню токена. Це можуть бути порядкові числа, GUID або Хеш.
Решта - це Public Claims які визначаються IANA.[2] Крім того, той хто видає JWT може також додати Private Claim використавши URI, хоча це не є стандартизованим. Наприклад, тут може бути використана якась онтологія, на зразок Дублінського ядра або FOAF.
Підпис
Структура підпису визначається стандартом JSON Web Signature (JWS, RFC 7515).
Щоб згенерувати підпис, заголовок та вміст кодуються в Base64, записуються в один рядок через крапку, а потім цей рядок хешується визначеним методом:
crit: Масив рядків із назвами ключів даного заголовка, які мають оброблятися парсером JWT. Якщо мають бути оброблені всі ключі, то використовується (critical).[12]
Реалізації
Реалізації JWT доступні на безлічі платформ. Актуальний список можна знайти на сайті JWT.io[3]
Security Event Token
Security Event Token (SET) розширює стандарт JWT твердженням events, яке містить список подій що стосуються безпеки.[4] Ці токени містять відмітку часу і дійсні необмежений час. Вміст SET-токена може виглядати наступним чином: