Руководство по генератору JWT: Создание токенов с подписью HS256/RS256
Что такое JWT
JSON Web Token (JWT) — это компактный автономный формат токена, широко используемый для аутентификации и обмена информацией:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNzAwMDAwMDAwLCJleHAiOjE3MDAwMDgwMDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
↑ Header ↑ Payload ↑ Signature
JWT состоит из трёх строк в кодировке Base64URL, разделённых
..
Трёхчастная структура
Header
{
"alg": "HS256",
"typ": "JWT"
}
| Поле | Значение |
|---|---|
alg |
Алгоритм подписи: HS256, RS256 и т.д. |
typ |
Тип токена, всегда JWT |
Payload
{
"sub": "1234567890",
"name": "John Doe",
"role": "admin",
"iat": 1700000000,
"exp": 1700008000
}
| Поле | Значение | Обязательное |
|---|---|---|
sub |
Субъект (ID пользователя) | Рекомендуется |
iat |
Временная метка выдачи | Рекомендуется |
exp |
Срок действия | Обязательное |
iss |
Издатель | Необязательное |
aud |
Аудитория | Необязательное |
nbf |
Не ранее (время вступления в силу) | Необязательное |
Signature
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
Подпись гарантирует, что токен не был изменён, но Payload НЕ зашифрован по умолчанию — никогда не помещайте в него конфиденциальные данные!
HS256 vs RS256
| Сравнение | HS256 | RS256 |
|---|---|---|
| Тип алгоритма | Симметричный (HMAC) | Асимметричный (RSA) |
| Ключ | Общий секрет (строка) | Открытый ключ + Закрытый ключ |
| Верификатор | Нужен тот же секрет | Нужен только открытый ключ |
| Сценарий использования | Один сервис, внутренние микросервисы | Многосервисная архитектура, верификация третьими сторонами |
| Управление ключами | Простое, но выше риск утечки | Безопаснее, открытый ключ можно распространять |
Рекомендация: Используйте HS256 для монолитов, RS256 для микросервисов/открытых API.
Использование генератора JWT
Шаг 1: Откройте инструмент
Перейдите к Генератору JWT, чтобы войти в интерфейс создания токенов.
Шаг 2: Выберите алгоритм подписи
- Один сервис: Выберите HS256 и введите общий секрет
- Несколько сервисов: Выберите RS256 и вставьте закрытый ключ
Шаг 3: Заполните Payload
Добавьте claims в редакторе payload:
{
"sub": "user_10086",
"name": "John Doe",
"role": "admin",
"iat": 1700000000,
"exp": 1700008000
}
iatиexpиспользуют временные метки Unix (секунды). Инструмент поддерживает визуальную настройку срока действия.
Шаг 4: Сгенерируйте токен
Нажмите «Сгенерировать». Инструмент автоматически:
- Кодирует Header в Base64URL
- Кодирует Payload в Base64URL
- Вычисляет подпись с использованием ключа
- Объединяет в полную строку JWT
Шаг 5: Проверьте токен
Вставьте сгенерированный токен в Декодер JWT и убедитесь:
- Header и Payload декодируются корректно
- Верификация подписи проходит успешно
- Время
expне истекло
Рекомендации по сроку действия
| Сценарий | Рекомендуемый exp | Причина |
|---|---|---|
| Access Token | 15-30 минут | Короткий срок, снижает риск утечки |
| Refresh Token | 7-30 дней | Длинный срок, используется для обновления |
| Ссылка для подтверждения по email | 1-24 часа | Одноразовое использование |
| API Key | Без exp или 1+ год | Долгосрочные учётные данные |
Рекомендация: Используйте подход с двумя токенами — Access Token + Refresh Token.
Примечания по кодировке Base64URL
JWT использует кодировку Base64URL, которая отличается от стандартного Base64:
| Отличие | Стандартный Base64 | Base64URL |
|---|---|---|
+ |
+ |
- |
/ |
/ |
_ |
Паддинг = |
Да | Нет |
При использовании инструмента кодирования/декодирования Base64 убедитесь, что выбран URL-безопасный режим.
Частые проблемы
| Проблема | Причина | Решение |
|---|---|---|
| Верификация подписи не удалась | Несовпадение ключей | Убедитесь, что для генерации и верификации используется один и тот же ключ |
| Токен истёк | Время exp прошло | Перегенерируйте или используйте Refresh Token |
| Payload нечитаемый | Не декодирован в Base64URL | Используйте Декодер JWT |
| Конфиденциальные данные раскрыты | Payload не зашифрован | Никогда не помещайте пароли или секреты в Payload |
| Верификация RS256 не удалась | Несовпадение открытого ключа | Убедитесь, что открытый ключ соответствует закрытому |
Заключение
JWT — это ключевая технология современной веб-аутентификации. Понимание трёхчастной структуры и различий между HS256/RS256, а также правильная настройка claims и срока действия — залог безопасного использования JWT. Генератор JWT и Декодер JWT позволяют выполнить полный цикл создания, декодирования и верификации токенов прямо в браузере.