Во-первых, что такое JWT?Понимание JWT, когнитивный JWT
Прежде всего, jwt на самом деле является аббревиатурой трех английских слов JSON Web Token. По полному имени у вас может быть базовое понимание. Токены обычно используются для аутентификации.Например, обычно используемый токен входа пользователя в нашу систему может использоваться для аутентификации того, вошел ли пользователь в систему. jwt также часто используется в качестве токена безопасности.
Определение JWT:
JWT — это краткая, безопасная для URL спецификация репрезентативных утверждений для обмена информацией о безопасности между двумя сторонами. В качестве открытого стандарта (RFC 7519) JWT определяет краткий автономный метод для безопасной передачи информации в виде объектов Json между взаимодействующими сторонами. Из-за наличия цифровой подписи этой информации доверяют, и JWT может быть подписан с использованием алгоритма HMAC или пары открытого и закрытого ключей RSA.
Возможности JWT:
- Компактный: Может быть отправлен через URL, параметры POST или в заголовке HTTP, поскольку объем данных небольшой, а скорость передачи высокая.
- автономный: Загрузка содержит всю информацию, необходимую пользователю, что позволяет избежать множественных запросов к базе данных.
2. Каков состав JWT или как выглядит JWT?
2.1.Структура JWT
JWT в основном состоит из трех частей, разделенных английской точкой '.'
- Заголовок
- Полезная нагрузка
- Подпись
Обратите внимание, что порядок header.payload.signature
Окончательная структура примерно такая:
leftso.com.blog
Конечно, настоящий jwt не может быть таким простым открытым текстом.
2.2.Заголовок JWT (Заголовок)
Заголовок обычно состоит из двух частей: тип токена и используемый алгоритм шифрования. следующее:
{
"alg": "HS256",
"typ": "JWT"
}
В приведенном выше содержимом JSON указано, что используемый в настоящее время метод шифрования — HS256, а тип токена — jwt.
Base64 кодирует вышеуказанное содержимое, чтобы получить заголовок нашего JWT, который закодирован следующим образом:
ewogICJhbGciOiAiSFMyNTYiLAogICJ0eXAiOiAiSldUIgp9ICA=
2.3. Нагрузка JWT (полезная нагрузка)
Полезная нагрузка — это вторая часть JWT. Стандарт JWT определяет несколько основных полей
-
iss
: эмитент этого JWT -
sub
: пользователь, для которого предназначен этот JWT -
aud
: Сторона, получающая JWT -
exp
(истекает): когда истекает, вот временная метка Unix -
iat
(выпущено в): когда было выпущено
В дополнение к стандартным полям нам также необходимо использовать некоторые из наших определений бизнес-процессов в поле, например, токен пользователя или токен обычно может содержать идентификатор пользователя, вошедшего в систему, простой пример: следующее:
{
"iss": "Lefto.com",
"iat": 1500218077,
"exp": 1500218077,
"aud": "www.leftso.com",
"sub": "leftso@qq.com",
"user_id": "dc2c4eefe2d141490b6ca612e252f92e",
"user_token": "09f7f25cdb003699cee05759e7934fb2"
}
Поля user_id и user_token выше — это все поля, которые мы определяем сами.
Теперь нам нужно закодировать в base64 всю часть полезной нагрузки, и закодированный результат выглядит следующим образом:
ewogICAgImlzcyI6ICJMZWZ0by5jb20iLAogICAgImlhdCI6IDE1MDAyMTgwNzcsCiAgICAiZXhwIjogMTUwMDIxODA3NywKICAgICJhdWQiOiAid3d3LmxlZnRzby5jb20iLAogICAgInN1YiI6ICJsZWZ0c29AcXEuY29tIiwKICAgICJ1c2VyX2lkIjogImRjMmM0ZWVmZTJkMTQxNDkwYjZjYTYxMmUyNTJmOTJlIiwKICAgICJ1c2VyX3Rva2VuIjogIjA5ZjdmMjVjZGIwMDM2OTljZWUwNTc1OWU3OTM0ZmIyIgp9
2.4.
Подпись
Подпись на самом деле является проверкой подписи заголовка JWT и интеграции полезной нагрузки.
Во-первых, вам нужно передать заголовок и полезную нагрузку.Сцепите это следующим образом: header.Payload, приведенный выше пример будет выглядеть так после цепочки:
ewogICJhbGciOiAiSFMyNTYiLAogICJ0eXAiOiAiSldUIgp9ICA=.ewogICAgImlzcyI6ICJMZWZ0by5jb20iLAogICAgImlhdCI6IDE1MDAyMTgwNzcsCiAgICAiZXhwIjogMTUwMDIxODA3NywKICAgICJhdWQiOiAid3d3LmxlZnRzby5jb20iLAogICAgInN1YiI6ICJsZWZ0c29AcXEuY29tIiwKICAgICJ1c2VyX2lkIjogImRjMmM0ZWVmZTJkMTQxNDkwYjZjYTYxMmUyNTJmOTJlIiwKICAgICJ1c2VyX3Rva2VuIjogIjA5ZjdmMjVjZGIwMDM2OTljZWUwNTc1OWU3OTM0ZmIyIgp9
Поскольку для алгоритма шифрования HMacSHA256 требуется ключ, мы временно используем здесь для ключа leftso.
Зашифрованное содержимое:
686855c578362e762248f22e2cc1213dc7a6aff8ebda52247780eb6b5ae91877
По сути, зашифрованный контент и является подписью JWT, что аналогично тому, когда мы шифруем файл с помощью MD5, а затем сравниваем полученный файл с md5.Просто здесь алгоритму HMacSHA256 нужен ключ.Конечно, этот ключ должны быть известны как пользователю, так и получателю.
Base64 кодирует вышеуказанное содержимое подписи, чтобы получить окончательную подпись.
Njg2ODU1YzU3ODM2MmU3NjIyNDhmMjJlMmNjMTIxM2RjN2E2YWZmOGViZGE1MjI0Nzc4MGViNmI1YWU5MTg3Nw==
2.5 Окончательный JWT
ewogICJhbGciOiAiSFMyNTYiLAogICJ0eXAiOiAiSldUIgp9ICA=.ewogICAgImlzcyI6ICJMZWZ0by5jb20iLAogICAgImlhdCI6IDE1MDAyMTgwNzcsCiAgICAiZXhwIjogMTUwMDIxODA3NywKICAgICJhdWQiOiAid3d3LmxlZnRzby5jb20iLAogICAgInN1YiI6ICJsZWZ0c29AcXEuY29tIiwKICAgICJ1c2VyX2lkIjogImRjMmM0ZWVmZTJkMTQxNDkwYjZjYTYxMmUyNTJmOTJlIiwKICAgICJ1c2VyX3Rva2VuIjogIjA5ZjdmMjVjZGIwMDM2OTljZWUwNTc1OWU3OTM0ZmIyIgp9.Njg2ODU1YzU3ODM2MmU3NjIyNDhmMjJlMmNjMTIxM2RjN2E2YWZmOGViZGE1MjI0Nzc4MGViNmI1YWU5MTg3Nw==