📕Грокнул тему JWT (JSON Web Token) Тема из категории "такие вещи знать надо, ты че!"☹️.
JWT состоит из 3 частей, разделенных точками:1️⃣
head (заголовок) — сконвертированный в base64 JSON, содержащий тип токена и алгоритм подписи.
{
"alg": "HS256",
"typ": "JWT"
}2️⃣
payload (полезные данные) — сконвертированный в base64 JSON, содержащий в себе данные, позволяющие однозначно идентифицировать пользователя, определить время жизни токена и т.д.
{
"sub": "ahmadum01",
"iat": 1516239022
}3️⃣
signature (подпись) — вычисляется с применением алгоритма подписи, указанного в заголовке, к строке
f"{head}.{body}" с секретным ключом🤫.
Выглядит эта штука примерно так:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhaG1hZHVtJ3Mgbm90ZXMifQ.4exaja18wwbmRt-u_v_cZO3sKgzJFNPJqpGVhk7HwQk
Поиграться с генерацией JWT можно
тут.
А еще, по приколу, написал
свой генератор JWT.
Важно понимать, что данные, передаваемые в payload, не зашифрованы и любая
Ева способна их прочесть(достаточно конвертнуть base64 снова в JSON), поэтому передавать в них приватные данные нельзя🤐. Суть токена в том, что он подписан, и его нельзя подделать. То есть, не получится, перехватив чужой токен, подменить данные в payload и ходить по сервисам, как ни в чем не бывало😏.
А теперь о крутости этой штуки😎
:🚩Аутентификация, основанная на JWT, позволяет получать токен с одного сервиса и ходить с ним на любой другой сервис без надобности хранить где-то токены, достаточно раскидать секретные ключи по всем сервисам.
🚩Можно генерить различные типы JWT для одного и того же user-а, жонглируя🤹 payload-ом, например для того, чтобы ограничивать доступ к определенным ресурсам с определенного JWT.
🚩Можно создавать JWT с суперкоротким временем жизни, чтобы мстить фронтендерам👍.
Ahmadum's notes