JavaRush /Курси /Модуль 3: Django /JWT (JSON Web Tokens): основи та переваги

JWT (JSON Web Tokens): основи та переваги

Модуль 3: Django
Рівень 18 , Лекція 4
Відкрита

Нарешті, ми дійшли до одного з найпопулярніших методів аутентифікації на сьогодні — JSON Web Tokens (JWT). Ця лекція присвячена тому, щоб зануритися в концепцію JWT, зрозуміти її переваги, дізнатися, як вона працює, а також порівняти її з іншими методами аутентифікації.

Що таке JWT?

JSON Web Token (JWT) — це стандарт (RFC 7519) для створення токенів у форматі JSON, які можна використовувати для передачі інформації між сторонами. Ці токени базуються на цифровому підписі та шифруванні, що робить їх надійним методом аутентифікації.

JWT складається з трьох основних частин, розділених крапками .:

  1. Header (Заголовок): вказує тип токена (зазвичай JWT) та алгоритм шифрування (наприклад, HS256).
  2. Payload (Корисне навантаження): містить дані (наприклад, ID користувача або роль). Ці дані не шифруються, тому вони видимі будь-якій стороні.
  3. Signature (Підпис): перевіряє автентичність токена. Вона створюється з використанням header + payload і секретного ключа.

Приклад токена JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJ1c2VyX2lkIjoxMjMsInJvbGUiOiJ1c2VyIn0
.4P5NYRoQ9isGqwS8Gb0YvBRtk9dcbG6AzlvEl5jOYz4
Цікавий факт:

якщо ви закодували конфіденційну інформацію в payload і думаєте, що вона "безпечна", подумайте ще раз! JWT не шифрує дані, а лише підтверджує їх автентичність.

Як працює JWT?

Механіка JWT досить проста і складається з таких кроків:

  1. Ідентифікація та вхід:

    • Користувач вводить свої облікові дані (логін і пароль).
    • Сервер перевіряє дані і, якщо вони коректні, створює JWT.
    • Цей токен повертається користувачу (зазвичай через HTTP-відповідь).
  2. Використання токена:

    • При кожному запиті клієнт відправляє JWT у заголовку HTTP (зазвичай у полі Authorization: Bearer <токен>).
    • Сервер перевіряє токен. Якщо токен валідний, сервер вважає користувача автентифікованим.
  3. Перевірка токена:

    • Сервер розшифровує токен, використовуючи секретний ключ, і перевіряє його підпис.
    • Якщо підпис коректний, сервер довіряє даним у payload.

Переваги використання JWT

Тепер давайте розберемося, чому JWT став таким популярним інструментом у розробці сучасних додатків.

  1. Безпека. JWT використовує криптографічний підпис (наприклад, HMAC SHA-256). Це гарантує, що ніхто не зможе підмінити дані токена без знання секретного ключа. А якщо ви використовуєте асиметричне шифрування (наприклад, RSA), то навіть сервер і клієнт можуть обмінюватися токенами безпечно.

  2. Масштабованість. На відміну від класичних сесій на сервері, JWT зберігається на стороні клієнта (у localStorage, sessionStorage або cookie). Серверу не потрібно зберігати стан токена. Це спрощує роботу в розподілених системах і зменшує навантаження на сервер.

  3. Простота використання. JWT передаються легко — це всього лише рядки. Вони можуть використовуватися в заголовках HTTP, URL-параметрах або тілі запитів.

  4. Гнучкість. Токени JWT можуть містити будь-яку інформацію, яка вам потрібна. Це дозволяє передавати не тільки ідентифікатор користувача, але й такі дані, як ролі, права доступу тощо.

Архітектурні переваги JWT

Давайте порівняємо JWT з іншими методами аутентифікації. Для цього розглянемо сценарії їх використання:

Метод Де зберігається стан Безпека Масштабованість Приклад використання
Сесії (Cookies) Сервер Висока Складно масштабувати Традиційні веб-додатки
Token Сервер Висока Помірно масштабується Django TokenAuthentication
JWT Клієнт Висока (з HTTPS) Легко масштабується Мобільні або Single Page Applications (SPA)

Порівняння JWT та традиційних токенів

Традиційні токени

  1. Кожен токен зберігається на сервері (наприклад, у базі даних або в кеші).
  2. Сервер має перевіряти токен на кожному запиті, порівнюючи його з оригіналом.
  3. Якщо токен потрібно відкликати, він видаляється із сервера.

JWT

  1. Серверу не потрібно нічого зберігати — токен самодостатній.
  2. Підпис токена — це єдине, що потрібно серверу для перевірки.
  3. Щоб відкликати JWT, сервер має реалізувати додаткові механізми (наприклад, "чорний список").

Коли використовувати JWT?

JWT чудово працює в таких сценаріях:

  • Single Page Applications (SPA): React, Vue або Angular додатки, що взаємодіють через API.
  • Мобільні додатки: додатки, які повинні працювати автономно та зберігати авторизацію.
  • Мікросервісна архітектура: коли кілька сервісів взаємодіють один з одним через API.

Проте не використовуйте JWT, якщо:

  • Вам важлива можливість негайного відкликання токенів (наприклад, при зміні паролю).
  • Ви працюєте з критично важливими даними, які не повинні бути розкриті навіть тимчасово.

Питання безпеки

JWT настільки безпечний, наскільки ви його налаштуєте. Ось кілька порад:

  1. Зберігайте секретний ключ у безпеці. Якщо хтось його дізнається, він зможе створювати підроблені токени.
  2. Використовуйте HTTPS. Хоча JWT сам по собі безпечний, передача токена через HTTP робить його вразливим до перехоплення.
  3. Обмежте термін дії токена. Чим коротше "життя" токена, тим менше шансів на його зловживання.
  4. Реалізуйте механізми відкликання токенів. Використовуйте чорні списки або коротке життя токенів з можливістю оновлення.

Приклад JWT на практиці

Header:

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload:

{
  "user_id": 123,
  "role": "admin",
  "exp": 1700000000
}

Signature (створений за допомогою HMACSHA256(Header + Payload, secret_key)):

4P5NYRoQ9isGqwS8Gb0YvBRtk9dcbG6AzlvEl5jOYz4

Цей токен можна відправити серверу в заголовку HTTP:

Authorization: Bearer <токен>

Ці основні ідеї та принципи відкривають перед вами двері до безпечної та масштабованої автентифікації! Побачимось у наступній лекції, де ми зануримось у реалізацію JWT у вашому Django-застосунку.

3
Опитування
Аутентифікація та дозволи, рівень 18, лекція 4
Недоступний
Аутентифікація та дозволи
Аутентифікація та дозволи
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ