Что такое JWT
Что проверяют
Понимаете ли вы, какую задачу решает подписанный токен (сервису не нужно ходить в общее хранилище сессий) и какой ценой. Аналитику структура из трёх частей нужна не сама по себе, а чтобы корректно написать требования: срок жизни, состав данных, выход из системы и отзыв доступа.
Как отвечать
JWT это строка из трёх частей через точку: заголовок (тип и алгоритм подписи), полезная нагрузка (набор утверждений) и подпись. Первые две части закодированы base64url, то есть читаются кем угодно без всякого ключа. Подпись гарантирует не секретность, а неизменность: получатель пересчитывает её своим ключом и видит подмену.
Стандартные поля стоит называть по именам: sub (о ком токен), iss и aud (кто выдал и кому предназначен), exp и iat (до какого момента годен и когда выдан), jti (идентификатор экземпляра, по нему возможен отзыв). Рабочая схема почти всегда парная: короткоживущий токен доступа и долгий токен обновления, который лежит на сервере и может быть аннулирован.
В требованиях фиксируются срок жизни каждого типа токена, поведение при истечении, что происходит при смене пароля и роли, где именно токен хранится на клиенте и как выглядит выход на всех устройствах.
Где спотыкаются
Считают содержимое секретным и кладут туда персональные данные. Нагрузка не шифруется, токен оседает в логах прокси, а хранение в обычном локальном хранилище браузера делает его добычей любого межсайтового скрипта.
Пишут, что выход из системы удаляет токен, и на этом заканчивают. Подписанный токен действует до истечения срока у всякого, кто успел его скопировать: отзыв требует либо очень короткого срока жизни, либо списка аннулированных идентификаторов.
Кладут в нагрузку роли и права, а потом удивляются, что снятие прав действует не сразу. Пока живёт выданный токен, сервис видит старый набор ролей, и это надо либо принять явно, либо проверять права по каждому запросу.