• XSS.stack #1 – первый литературный журнал от юзеров форума

5 простых шагов для понимания JSON Web Tokens (JWT)

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
1*9pWUdYPAwCQoWdEnvZli4A.jpeg
Веб-токен JSON (JWT)
JSON Web Token (JWT) - это объект JSON, и он считается одним из самых безопасных способов передачи информации между двумя участниками. Для его создания необходимо определить заголовок с общей информацией о токене, данными полезной нагрузки, такими как идентификатор пользователя, его роль и т.д., и сигнатурами.

Приложение использует JWT для проверки подлинности пользователя следующим образом:
  1. Сначала пользователь входит на сервер аутентификации, используя ключ аутентификации (это может быть пара имя пользователя / пароль , либо ключ Facebook , либо ключ Google , либо ключ из другой учетной записи).
  2. Затем сервер аутентификации создает JWT и отправляет его пользователю.
  3. Когда пользователь делает запрос к API приложения, он добавляет к нему ранее полученный JWT .
  4. Когда пользователь делает запрос API, приложение может проверить, является ли пользователь тем, кем он себя считает, используя запрос JWT . В этой схеме сервер приложений настроен так, чтобы иметь возможность проверять, является ли входящий JWT именно тем, что был создан сервером аутентификации (процесс проверки будет объяснен позже более подробно).

JWT структура
JWT состоит из трех частей: заголовок, полезная нагрузка и подпись. Давайте пройдемся по каждому из них.

Шаг 1. Создание заголовка
Заголовок JWT содержит информацию о том , как JWT следует рассчитывать подпись. Заголовок также является объектом JSON, который выглядит следующим образом:
Код:
header = { “alg”: “HS256”, “typ”: “JWT”}
Он будет использоваться при создании подписи. Ничего, кроме HMAC-SHA256 для его расчета вам не понадобится, и только один секретный ключ.

Шаг 2. Создание payload
Полезная нагрузка - это полезная нагрузка, которая хранится внутри JWT. В этом примере сервер аутентификации создает JWT с информацией о userId
Код:
payload = { “userId”: “b08f86af-35da-48f2–8fab-cef3904660bd” }
Существует список стандартных приложений для полезной нагрузки JWT - вот некоторые из них:
  • iss (issuer) - определяет приложение, из которого отправляется токен.
  • sub (subject) - определяет тему токена.
  • exp (expiration time) - время жизни токена.

Шаг 3. Создание подписи
Base64url алгоритм кодирует заголовок и полезную нагрузку, созданную в шаге 1 и 2 . Алгоритм объединяет закодированные строки через точку.
Код:
// header eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
// payload eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ
// signature -xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM

Шаг 4. Теперь объедините все 3 компонента JWT вместе
Теперь, когда у нас есть все три компонента, мы можем создать наш JWT
Код:
const token = encodeBase64Url(header) + ‘.’ + encodeBase64Url(payload) + ‘.’ + encodeBase64Url(signature)
или
Код:
// JWT Token //eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM

Вы можете попробовать создать свой собственный JWT в онлайне здесь jwt.io


оригинальная заметка
Перевод: tabac, специально для https://xss.pro
 
Извините за гугл переводчик. При использовании JWT важно обратить внимание на то, что «alg» может быть «none», что позволяет создавать JWT без подписи! Это обходит всю безопасность
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх