Перейти к основному содержимому

JWT

JWT - строка в формате header.payload.signature. Используется для защиты данных от неавторизованного доступа.

Header - JSON объект формата:

{
"alg": "HS256", // алгоритм хеширования для создания signature
"typ": "JWT"
}
примечание

HS256 - симметричный алгоритм шифрования, вместо него может использоваться ассиметричный RS256

Payload

Payload - JSON объект произвольного формата.

примечание

Payload, как и Header, не подвергается шифрованию, поэтому не стоит хранить в нем чувствительные данные.

Signature

Подпись вычисляется как хэш объявленного в header алгоритма от объединенных через точку header и payload в кодировке base64, а также secret.

const headerB64 = base64(header)
const payloadB64 = base64(payload)

const signature = HS256(`${headerB64}.${payloadB64}`, secret)

Token

const jwt = `${headerB64}.${payloadB64}.${signature}`

Использование

Сервис авторизации после получения авторизационный данных генерирует jwt токен, с которым далее клиент производит запрос в сервису приложения. Сервис приложения, получив токен от клиента и secret от сервиса авторизации, проверяет подпись и, если она совпадает, считает данный запрос авторизованным.

Access и Refresh

В современной схеме сервер авторизации отдает клиенту два токена access - jwt и refresh - произвольного формата.

refresh токен имеет продолжительное время жизни (от нескольких часов до нескольких лет)
может содержать цифровой отпечаток клиента, который проверяется при использовании токена.
При попытке обмена токена более одного раза, либо при несовпадении цифрового отпечатка, и новый и старый токены попадают в blacklist, текущая сессия отзывается и клиенту предлагается заново пройти просесс аутентификации.
Нигде, кроме как во взаимодействии между клиентом и сервером авторизации refresh не используется. Рефреш токен должен храниться в http only cookie.

access токен короткоживущий (обычно не боллее 15 мин).
Короткое время жизни обусловлено невозможностью отзыва и проверки на скомпроментированность. Время жизни токена может предоставляться в payload поле iat (issue at time) если оно истекло, сервер отвечает 401 статус кодом.

Ресурсы

Ресурсы