Pascal4eg / Java

 Java | Фишки и трюки

JSON Web Token (JWT)

JSON Web Token (JWT) — это открытый стандарт (RFC 7519) для создания токенов доступа, основанный на формате JSON. Как правило, используется для передачи данных для аутентификации в клиент-серверных приложениях. Токены создаются сервером, подписываются секретным ключем и передаются клиенту, который в дальнейшем использует данный токен для подтверждения подлинности аккаунта.

JWT состоит из трех частей, разделенных точкой: заголовок (Header), полезная нагрузка (Payload), и подпись (Signature). Каждая часть представлена в кодировке Base64.

Header содержит два элемента - тип токена (typ) и алгоритм хеширования (alg). Тип токена обычно установлен в "JWT", а алгоритм хеширования указывает, как будет создана подпись.

Payload содержит данные о пользователе, например идентификатор, имя и прочие.

Signature создается с использованием алгоритма хеширования и секретного ключа. Подпись обеспечивает проверку целостности токена и подтверждает, что токен был создан доверенной стороной.

В клиент-серверных приложениях используются два вида токена:

Access-токен — это токен, который предоставляет доступ его владельцу к защищённым ресурсам сервера. Обычно он имеет короткий срок жизни и может нести в себе дополнительную информацию, такую как IP-адрес стороны, запрашивающей данный токен.

Refresh-токен — это токен, позволяющий клиентам запрашивать новые access-токены по истечении их времени жизни. Данные токены обычно выдаются на длительный срок.

Как правило, при использовании JSON-токенов в клиент-серверных приложениях реализована следующая схема:

1️⃣ Клиент проходит аутентификацию в приложении (к примеру, с использованием логина и пароля).

2️⃣ В случае успешной аутентификации сервер отправляет клиенту access- и refresh-токены.

3️⃣ При дальнейшем обращении к серверу клиент использует access-токен. Сервер проверяет токен на валидность и предоставляет клиенту доступ к ресурсам.

4️⃣ В случае, если access-токен становится невалидным, клиент отправляет refresh-токен, в ответ на который сервер предоставляет два обновлённых токена.

5️⃣ В случае, если refresh-токен становится невалидным, клиент опять должен пройти процесс аутентификации.

JWT позволяет создавать безопасные механизмы аутентификации и авторизации без необходимости сохранения состояния сессии на сервере. Он также широко используется в распределенных системах и при создании микросервисов для передачи данных о субъекте (пользователе) между различными компонентами системы.