Віктор Турський про програмування / навігатор

концепції / jwt

JWT

Улюблена тема каналу для питань із підступом: JWT виглядає зашифрованим, але це просто base64url-кодування плюс підпис — фронтенд може прочитати весь payload без жодного ключа (різниця між хешуванням, кодуванням і шифруванням). У відео про Base64 Віктор доводить це наживо: header (метадані про алгоритм) і payload розкодовуються звичайним base64 --decode; секрет потрібен лише для перевірки підпису. Віра в те, що JWT шифрує свій payload, і використання його як прихованого сховища сесії — його дефолтний приклад пастки поверхневих знань (3 речі, що роблять програміста кращим); ліки — розуміти, що таке підпис насправді.

Утім, при правильному використанні JWT потужний: токен несе всю підписану сесію, тож він stateless і його не потрібно зберігати в базі — у цьому й сенс (Q&A №1). Підпис може бути симетричним (HMAC на спільному секреті, де емітент = перевіряльник) або асиметричним — і асиметричний варіант сяє в мікросервісах: сервіс авторизації підписує своїм приватним ключем, а всі інші сервіси перевіряють лише публічним, тож секрет ніколи не покидає емітента (асиметричне шифрування і цифрові підписи).

Розібрано у відео

Повʼязане

Цифрові підписи — те, чим JWT є насправді. Base64 — те, як JWT запакований (base64url). Шифрування — те, чим JWT не є. Асиметричне шифрування — чому мікросервіси можуть перевіряти без спільних секретів. Мікросервіси — архітектура, де асиметричний підпис JWT окупається.