JSON Web Token простыми словами
JWT используются почти в каждом современном входе и API. Это руководство объясняет их устройство, чтение и безопасное использование.
Открыть инструмент: Декодер JWT
Три части
JWT выглядит как xxxxx.yyyyy.zzzzz. Первая часть — заголовок, объект JSON с алгоритмом (alg) и типом (typ). Вторая — полезная нагрузка с полями. Третья — подпись, вычисленная по первым двум частям секретом или закрытым ключом. Каждая часть закодирована в base64url, чтобы безопасно передаваться в URL и заголовках HTTP.
Зарегистрированные поля
- iss (издатель): кто создал и подписал токен.
- sub (субъект): пользователь или сервис, к которому относится токен.
- aud (аудитория): какое приложение должно его принять.
- exp (истечение): когда токен перестаёт действовать.
- nbf (не ранее): когда токен начинает действовать.
- iat (выдан): когда токен создан.
- jti (ID токена): уникальный ID для защиты от повторного использования.
Токены доступа и ID-токены
В OpenID Connect ID-токен сообщает клиентскому приложению, кто вошёл, и содержит поля профиля, например имя и почту. Токен доступа отправляется в API и показывает, что разрешено вызывающей стороне, часто с полем scope. Токены доступа должны жить недолго, обычно от минут до часа, и обновляться с помощью refresh-токена.
Каких ошибок избегать
- Декодировать токен без проверки и доверять его полям.
- Принимать алгоритм, указанный в токене, а не тот, который ожидает сервер.
- Использовать короткий или угадываемый секрет HMAC. Нужно не меньше 32 случайных байт.
- Хранить чувствительные данные в полезной нагрузке.
- Выдавать токены без срока действия или очень долгоживущие токены доступа.