Катим в прод | Александр Калыргин
25.01
🚀 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) Это как оставить ключи от дома на видном месте.
Пишите, если остались вопросы 👨💻
еще контент в этом сообществе
еще контент в этом соообществе
Катим в прод | Александр Калыргин
25.01
войдите, чтобы увидеть
и подписаться на интересных профи