В этой статье мы узнаем основные основы JWT Token, и как мы можем извлечь выгоду из него для аутентификации связи между двумя сторонами, все это используя ванилью Nodejs и JavaScript.
JWT – это аббревиатура для веб-токена JSON, что является компактным средством безопасных URL-моделей представляющих претензий, которые должны быть переданы между двумя сторонами. Претензии в JWT кодируются как объект JSON, который цифровым подписан с использованием JSON Web Signature (JWS). ~ IETF.
Ургг! Какой?
Проще говоря, токен JWT – это строка, которую мы проходим в заголовке или URL, при этом создаем сетевую заявку, чтобы безопасно пройти данные и убедиться, что она не поддается.
Пример: www.example.com/private/?token=xxxxx.yyyyy.zzzzz
Вам может быть интересно, что с форматом токена! JWT Tookens состоит из трех частей, разделенных точками ( . )
которые:
header.payload.signature
Давайте посмотрим отдельные части токена JWT в деталях.
1. Заголовок Заголовок обычно состоит из двух частей: тип токена, который является JWT, и используемый хеширование алгоритма, такой как HMAC SHA256 или RSA.
{ "alg": "HS256", "typ": "JWT" }
Затем эта JSON является Base64URL, закодирована для формирования первой части JWT.
'use strict'; var header = { "alg": "HS256", "typ": "JWT" }; var enc_header = Buffer.from(JSON.stringify(header)).toString('base64'); // ► "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
2. Полезная нагрузка
Вторая часть токена – полезная нагрузка, которая содержит претензии Отказ Претензии являются предопределенными ключами и их ценностями. Существует три типа претензий: зарегистрированные, государственные и частные претензии.
Зарегистрированные претензии: Это набор предопределенных ключей, которые не являются обязательными, но рекомендуются. Некоторые из них ассортимент (Эмитент), exp (время истечения) и т. Д.
Общественные претензии: Они могут быть определены по желанию, используя JWTS. Но, чтобы избежать столкновений они должны быть определены в реестре IANA JSON Web Token или определяются как URI, который содержит стойкое пространство устойчивого столкновения.
Частные претензии: Это пользовательские пары ключевых значений, созданные для обмена информацией между сторонами, которые согласуются с их использованием, и не являются ни зарегистрированными или государственными претензиями.
{ "exp": "2019-02-14", "message": "roses are red" }
Полезная нагрузка затем Base64URL кодируется для формирования второй части веб-сайта JSON Токен.
'use strict'; var payload = { "exp": "2019-02-14", "message": "roses are red" }; var enc_payload = Buffer.from(JSON.stringify(payload)).toString('base64'); // ► eyJleHAiOiIyMDE5LTAyLTE0IiwibmFtZSI6IkpvaG4gRG9lIn0
3. Подпись
Чтобы создать часть подписи, которую вы должны взять кодированный заголовок, кодированную полезную нагрузку, секрет, алгоритм, указанный в заголовке и подписи. Слишком хорошо для нас, что Nodejs поставляется с огромным могущественным Крипто библиотека Из коробки, которую мы будем использовать в нашем примере.
'use strict'; const crypto = require('crypto'); var jwt_secret = "secret"; // enc_header and enc_payload are computed earlier var signature = crypto.createHmac('sha256', jwt_secret).update(enc_header +"."+ enc_payload).digest('base64'); // ► 6C46KAaZGp6RjbSqGllfdQF7g8vXCp02NTSrz-PzeoI
Подпись используется для проверки того, что отправитель JWT является тем, кто он говорит, и убедиться, что сообщение не было изменено по пути.
Последний токен JWT выглядит так
var token = `${enc_header}.${enc_payload}.${signature}`; // ► eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOiIyMDE5LTAyLTE0IiwibWVzc2FnZSI6InJvc2VzIGFyZSByZWQifQ.0u-mkgLo5479CPjJJ4mXCwn2RW4dFT12fiYiopRWsZw
Вот что-то важное вспомнить, так это то, что токены JWT используются для аутентификации и не шифрования, поэтому даже не зная секретный ключ, кто-то может прочитать ваш заголовок и данные полезных нагрузок.
Но после получения токена вы можете снова подписать заголовок и полезную нагрузку с вашим секретным ключом и сравнить его с полученной подписью для обнаружения подделки токена или сообщения.
Хорошее место для начала будет собираться на это Online Jwt Debugger на JWT.IO И играть с токеном, который мы только что сгенерировали выше.
Привет! Я @Siwalik ! Если вам понравилась эта статья, следуйте за мной в Twitter, чтобы узнать о моих последних технологических экспедициях и боковых проектах! 🙌.
Оригинал: “https://dev.to/siwalikm/what-the-heck-is-jwt-anyway–47hg”