4

Сессии, JWT, Access, Refresh

Статья представляет собой конспект из нескольких источников. Если у вас есть дополнения/поправки или замечания, пишите о них в комментариях.

Сессии, JWT, Access, Refresh Программирование, Длиннопост, Сервер, Access

Основные понятия

Регистрация

Клиент отправляет данные для входа на сервер. Сервер создает аккаунт и часто сразу проводит аутентификацию (в большинстве случаев).

Сессии, JWT, Access, Refresh Программирование, Длиннопост, Сервер, Access

Регистрация

Аутентификация

Процесс, в результате которого сервер узнает, кто вы такой. Клиент отправляет данные для входа, сервер проверяет их валидность. Если данные верны, сервер создает токен или идентификатор и отправляет его клиенту.

Сессии, JWT, Access, Refresh Программирование, Длиннопост, Сервер, Access

Аутентификация

Авторизация

Процесс, в результате которого сервер узнает, что вы можете делать, а что нет. Сервер выполняет авторизацию каждый раз, когда пользователь производит серверную операцию. Например, при отправке DELETE-запроса сервер проверяет токен и возвращает разрешение или отказ.

Сессии, JWT, Access, Refresh Программирование, Длиннопост, Сервер, Access

Авторизация

Логинизация

Логика на клиенте, которая отрабатывает в зависимости от успешности аутентификации. Например, флаг isAuthenticated меняется с false на true, и вместо кнопки "Войти" отображается иконка профиля.

Сессии, JWT, Access, Refresh Программирование, Длиннопост, Сервер, Access

Логинизация

Сессионная аутентификация (Session-based)

Как это работает:

  1. Аутентификация: Клиент отправляет данные для входа, сервер проверяет их и создает сессию. Сервер возвращает клиенту UUID сессии, который хранится в куках.

  2. Авторизация: Клиент отправляет куки на сервер, сервер проверяет валидность сессии и возвращает положительный ответ.

Плюсы:

  • Безопасность: сессии хранятся на сервере.

Минусы:

  • Bottleneck (подробнее): При большом количестве пользователей нагрузка на сервер увеличивается.

Сессии, JWT, Access, Refresh Программирование, Длиннопост, Сервер, Access

Аутентификация

Сессии, JWT, Access, Refresh Программирование, Длиннопост, Сервер, Access

Авторизация

Аутентификация на основе токенов (Token-based)

Как это работает:

  1. Аутентификация: Клиент отправляет данные для входа, сервер проверяет их и создает токен (например, JWT), который отправляется клиенту.

  2. Авторизация: При каждом запросе клиент отправляет токен в заголовке Bearer <token>. Сервер проверяет токен и возвращает положительный ответ.

Плюсы:

  • Нет необходимости хранить данные на сервере, что предотвращает bottleneck.

Минусы:

  • Менее безопасен, так как токен хранится на клиенте.

Перейдем на уровень ниже.

JWT токен

JWT (JSON Web Token) — это строка в формате base64, которая состоит из трех частей:

  1. Header (Заголовок)
    Содержит информацию о типе токена (JWT) и алгоритме шифрования.

  2. Payload (Полезная нагрузка)
    Содержит утверждения (claims) — данные о пользователе, сроке действия токена и т.д.

  3. Signature (Подпись)
    Хэш токена, созданный на основе алгоритма из заголовка и зашифрованный с помощью приватного ключа.

Сессии, JWT, Access, Refresh Программирование, Длиннопост, Сервер, Access

Пример токена

Важно: Не храните в токене пароли или другую важную информацию, так как токен можно раскодировать.

Access Token и Refresh Token

Access Token

Access Token — это токен, который клиент использует для доступа к защищённым ресурсам на сервере. Обычно он имеет короткий срок жизни.

Refresh Token

Refresh Token — это токен, который используется для получения нового Access Token, когда текущий Access Token истекает. Обычно он имеет длительный срок жизни.

Как работает:

  1. После успешной аутентификации сервер создает и отправляет клиенту Access Token и Refresh Token.

  2. Клиент сохраняет Refresh Token в безопасном месте (например, в HTTP-only куках).

  3. Когда Access Token истекает, клиент отправляет Refresh Token на сервер для получения нового Access Token.

  4. Сервер проверяет Refresh Token и, если он действителен, выдаёт новый Access Token.

Источники:
Аутентификация в ASP.NET Core — YouTube
Аутентификация. Сессии и JWT — YouTube
Что такое JWT, Access и Refresh токены — YouTube