Перейти до вмісту

JSON Web Token

Матеріал з Вікіпедії — вільної енциклопедії.

JSON Web Token (JWT, МФА[dʒɒt]) це стандарт токена доступу на основі JSON, стандартизованого в RFC 7519. Використовується для верифікації тверджень.

Структура

JWT складається з трьох частин: заголовка, вмісту і підпису.

Заголовок

Заголовок (Header) це JSON елемент, який описує до якого типу токену належить даний і які методи шифрування використовувались.

Поле Назва Значення
typ Type Описує медіатип IANA Medientyp токену. В даному випадку   JWT завжди мають медітипapplication/jwt.
cty Content Type Це поле потрібне, коли JWT вміщає в себе інший 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 який описує твердження.

<syntax lang="json"> {

 "sub": "1234567890",
 "name": "John Doe",
 "admin": true

} </syntax>

Деякі твердженя зарезервовані:

Поле Назва Значення
iss Issuer Той хто видав токен
sub Subject Визначає якого суб'єкта стосуються твердження, тобто щодо кого або чого робляться твердження.

Підпис

Кодування

Заголовок вміст і підпис кожен кодуються в Base64 і розділяються в токені крапкою. JWT Token може виглядати так:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzY290Y2guaW8iLCJleHAiOjEzMDA4MTkzdHJ1ZX0.03f329983b86f7d9a9f5fef85305880101d5e302afafa20154d094b229f75773

Передача за допомогою HTTP

JWT передається в заголовках HTTP, зазвичай двома способами:

  • в полі Authorization як Bearer-Token: Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
  • в полі Cookie: Cookie: token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Обидва методи мають різні переваги і недоліки:

Bearer-Token Cookie
Заголовок Authorization: Bearer <JWT> Cookie: token=<JWT>
CORS Працює з CORS, проте необхідна реалізація на JavaScript. Кукі зберігаються в браузері лише для конкретного домену, CORS неможливий.
Зберігання Можливі всі способи зберігання доступні для JavaScript, як наприклад WebStorage чи Cookie-Store.
Cookie розміщуються в Cookie-Store.
  Захист від MITM Das Vorhandensein von TLS muss im JavaScript geprüft werden. Wenn das Flag secure am Cookie gesetzt wird, wird TLS erzwungen.
Schutz gegen XSS Muss im JavaScript implementiert werden. Implizit, wenn das Flag HttpOnly am Cookie gesetzt wird, um den Zugriff mittels JavaScript zu verhindern.
Schutz gegen CSRF Nicht möglich. Hier sind andere Maßnahmen nötig. Muss im JavaScript implementiert werden.

Див. також

Посилання

  • {{cite web}}: Порожнє посилання на джерело (довідка)

Зноски

Помилка цитування: Тег <ref> з назвою "implementations", визначений у <references>, не використовується в попередньому тексті.
Помилка цитування: Тег <ref> з назвою "public", визначений у <references>, не використовується в попередньому тексті.
Помилка цитування: Тег <ref> з назвою "selfissued", визначений у <references>, не використовується в попередньому тексті.