jsonwebtoken , v8.5.0
узел v10.13.0
нпм 6.4.1
Если я создаю токен несколько раз с помощью:
jwt.sign({ user_email: user_email, user_id: user_id, username: username }, 'RESTFULAPIs')
Вопрос 01:
Кажется, что первые 2 части строки всегда одинаковы (значения header
и payload
в base64), но третья часть (signature
) отличается.
Почему signature
отличается, если исходные значения совпадают?
Что я пробовал:
Я прочитал раздел signature
на jwt.io / вводной :
Для создания подписи вам понадобится:
- кодированный заголовок
- кодированная полезная нагрузка
- секрет
- алгоритм, указанный в заголовке
и подпишите это.
Итак, как предположение:
Является ли signature
результатом шифрования кодированных в base64 значений header
и payload
с использованием алгоритма HS256
и secret
, в данном случае это строка RESTFULAPIs
, которая создает другой результат каждый раз, когда он шифруется, а декодированный результат всегда одинаков?
Вопрос 02:
Декодированное значение различных токенов всегда одинаково, за исключением свойства объекта с именем iat
. Что представляет собой это свойство?
{
iat: 1561358034
user_id: "25423537fshsdgA"
user_email: "info@test.com"
username: "bob"
}
{
iat: 1561358156
user_id: "25423537fshsdgA"
user_email: "info@test.com"
username: "bob"
}
На самом деле, после более подробного изучения второго вопроса я наткнулся на следующее:
Заявка "iat" (выданная в) указывает время, когда JWT был
выпущен. Эта претензия может быть использована для определения возраста JWT. это
значение ДОЛЖНО быть числом, содержащим значение NumericDate.
Источник: https://tools.ietf.org/html/rfc7519#section-4.1.6