JavaRush /Курсы /Модуль 3: React /Основы аутентификации и JSON Web Token (JWT) — зачем это ...

Основы аутентификации и JSON Web Token (JWT) — зачем это нужно

Модуль 3: React
15 уровень , 0 лекция
Открыта

Введение

Аутентификация — это процесс, с помощью которого приложение убеждается, что вы — это вы. Это ваш цифровой паспорт, который говорит серверу: "Да, я действительно тот самый пользователь с ID 42, а не его злой двойник".

Разница между аутентификацией и авторизацией

Как программисты, мы любим придумывать разные слова для похожих вещей. Так появилась путаница между аутентификацией и авторизацией. Но разница проста:

  • Аутентификация отвечает на вопрос: кто вы? Например, "Это Петя, потому что он ввёл пароль, который знает только он".
  • Авторизация отвечает на вопрос: что вам разрешено делать? Например, "Поскольку это Петя, ему можно добавить новый пост, но нельзя удалять статьи других пользователей".

Почему аутентификация важна?

Представьте своё приложение без аутентификации. К примеру, это интернет-магазин. Вы заходите в профиль, добавляете товары в корзину, но... внезапно кто-то другой притворяется вами и покупает 10 холодильников на ваше имя. Забавно? Нет. Дорого? Очень. Именно поэтому аутентификация — это основа безопасности.

Что такое JSON Web Token (JWT)?

Теперь, когда мы понимаем, зачем нужна аутентификация, давайте разберёмся с инструментами. Встречайте JSON Web Token (JWT), главный герой сегодняшней лекции.

JWT похож на волшебный пропуск или билет. Это не просто набор данных, а закодированное (и подписанное) сообщение, которое говорит серверу: "Этот человек прошёл проверку, и вот доказательство".

Когда пользователь логинится в ваше приложение, сервер создаёт токен (JWT) и выдаёт его клиенту. Теперь клиент добавляет этот токен в заголовок каждого запроса, чтобы сервер мог понять: "О, это тот самый пользователь, я узнаю его по токену".

Структура JWT

JWT создан по стандарту (RFC 7519) и состоит из трёх частей:

  1. Заголовок (Header) — информация о типе токена (JWT) и алгоритме шифрования.
  2. Полезная нагрузка (Payload) — данные, которые мы хотим передать, например id пользователя, его роль и срок действия токена.
  3. Подпись (Signature) — самая важная часть. Это "магия", которая делает токен надёжным. Она создаётся с помощью секрета, известного только серверу.

Например, JWT выглядит так:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEyMzQ1Njc4OTAifQ.HKZJXHFCmj0jhq8R3D0uA-W-M7JmnYn0Ko1wAog3Aqw

Декодированный токен:

Header:

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

Payload:

{
  "userId": 1234567890
}

Signature:
Секретная строка, создаётся на сервере.

Преимущества использования JWT

Почему мы выбираем JWT, а не что-то другое (например, сессии)? Всё просто:

  1. JWT работает без необходимости сохранять данные на сервере. Вся информация хранится в самом токене.
  2. JWT можно использовать и на вебе, и в мобильных приложениях. Универсальность — это удобно.
  3. JWT поддерживает полезную нагрузку. Вы сами решаете, что хранить в токене: от id пользователя до его любимого цвета (но не надо).

Как работает JWT?

  1. Пользователь вводит свой логин и пароль.
  2. Сервер проверяет данные и, если всё ок, создаёт токен (супернадёжно подписанный секретным ключом).
  3. Токен возвращается клиенту.
  4. Теперь клиент отправляет этот токен в заголовке каждого запроса.
  5. Сервер принимает токен, проверяет его подлинность и (если всё норм) выполняет запрос.

Пример: регистрация и логин

Чтобы понять токены на практике, давайте представим маленькую схему:

Типичные ошибки при использовании JWT

Если делать всё быстро без теории, можно допустить следующие ошибки:

  1. Слишком большой срок действия токена. Представьте, если ваш JWT будет действовать год. Потеряли токен? Хакер его нашёл? Проблемы обеспечены.
  2. Хранение токена в localStorage без защиты. Если злоумышленник получит доступ к вашему браузеру, токен как на ладони.
  3. Забудете про валидацию токена. Ваш сервер должен проверять токен при каждом запросе, чтобы избежать подделок.
2
Задача
Модуль 3: React, 15 уровень, 0 лекция
Недоступна
Создание структуры JWT
Создание структуры JWT
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ