🚀 JWT токены: что это и зачем они нужны?

Представьте, что вы зашли в офис по пропуску. Пропуск содержит ваше имя, должность и срок действия. Охранник или система турникетов проверяет его подлинность и пускает внутрь. Если срок действия пропуска истек — придется его продлить. Подобным пропуском можно назвать JWT.

JWT (JSON Web Token) — это популярный инструмент для аутентификации и передачи данных. JWT выдается сервером, когда, например, вы логинитесь в приложении. Затем вы используете его для доступа и взаимодействия с защищенными ресурсами.

✏️ Виды JWT

Вернёмся к примеру с пропуском. Понятно, что если у пропуска есть срок действия, то вечно проходить через турникет не получится. Пропуск необходимо будет периодически продлевать. Так и с токеном - у него есть свой срок жизни, в течение которого он действует. Делать токен бессрочным небезопасно. Он может быть украден (скомпрометирован) и использован злоумышленниками с большей долей вероятности. При аутентификации используется два вида токенов:

🔑 «access token» — проверяется при каждом обращении к защищенному API. — многоразовый — присылается с каждым запросом к API в заголовке «authorization» — имеет короткий срок годности (обычно ~15 мин) — когда срок годности выходит, сервер возвращает 401

🔐 «refresh token» — токен для получения новой пары токенов (access и refresh). — одноразовый — имеет длительный срок годности (обычно несколько дней) — отправляется клиентом, когда истечет срок годности access токена и сервер вернет 401

⚙️ Из чего состоит JWT?

Токен имеет 3 части (разделены точками):  xxxxx.yyyyy.zzzzz  1️⃣ Header (xxxxx) — тип токена и алгоритм шифрования. 2️⃣ Payload (yyyyy) — данные (например, логин, срок действия).  3️⃣ Signature (zzzzz) — подпись, которая защищает токен от подделки. При получении токена сервер формирует подпись на основе полученных данных в Header и Payload, а потом сравнивает с переданной подписью. Так Signature гарантирует, что данные не менялись кем-то посторонним.

🔏 Виды шифрования JWT

JWS (JSON Web Signature) — это открытый JWT. 1️⃣ Данные хранятся в открытом виде. Header и Payload можно прочитать, они закодированы в base64. 2️⃣ Пример использования: аутентификация в веб-приложениях. JWE (JSON Web Encryption) — это зашифрованный JWT. Подходит для передачи платежных данных, медицинских записей 🔒. 1️⃣ Данные зашифрованы (нельзя прочитать без ключа). 2️⃣ Пример: токен для доступа к банковскому API.

Подытожим: цель JWS — проверить, что данные не менялись, а при JWE — также «спрятать» эти данные от всех.

🔑 Где хранят JWT?

Обычно на клиенте JWT хранится в: — Куки (Cookies); — SessionStorage; — Защищенном хранилище устройства (Keychain для iOS, Keystore для Android).

У каждого варианта есть свои плюсы и минусы, выбор нужно делать в зависимости от контекста конкретной ситуации.

Только не храните JWT в URL) Это как оставить ключи от дома на видном месте.

Пишите, если остались вопросы 👨‍💻

@katimvprod

🚀 JWT токены: что это и зачем они нужны? | Сетка — новая социальная сеть от hh.ru
repost

389

input message

напишите коммент

еще контент в этом сообществе

еще контент в этом соообществе

войдите, чтобы увидеть

и подписаться на интересных профи

в приложении больше возможностей

пока в веб-версии есть не всё — мы вовсю работаем над ней

сетка — cоциальная сеть для нетворкинга от hh.ru

пересекайтесь с теми, кто повлияет на ваш профессиональный путь