← Назад ко всем вопросам

Что такое refresh токен в JWT? Как работает обновление сессии?

1️⃣ Как кратко ответить

Refresh токен в JWT используется для обновления истекшего access токена без повторной аутентификации пользователя. Он имеет более длительный срок действия и хранится безопасно. Обновление сессии происходит путем отправки refresh токена на сервер, который выдает новый access токен.

2️⃣ Подробное объяснение темы

JWT (JSON Web Token) — это стандарт для создания токенов доступа, которые используются для аутентификации и авторизации пользователей в веб-приложениях. JWT состоит из трех частей: заголовка, полезной нагрузки и подписи. Access токен — это JWT, который содержит информацию о пользователе и его правах доступа, и имеет ограниченный срок действия.

Зачем нужен refresh токен

Access токены имеют короткий срок действия (например, 15 минут) для минимизации риска компрометации. Однако, если access токен истекает, пользователю пришлось бы повторно вводить свои учетные данные, что неудобно. Refresh токен решает эту проблему, позволяя обновлять access токен без повторной аутентификации.

Как работает refresh токен

  1. Выдача токенов: При успешной аутентификации сервер выдает два токена: access токен и refresh токен. Access токен используется для доступа к защищенным ресурсам, а refresh токен хранится безопасно (например, в httpOnly cookie).

  2. Использование access токена: Клиент использует access токен для доступа к API. Когда access токен истекает, клиент получает ошибку авторизации.

  3. Обновление access токена: Клиент отправляет запрос на сервер с refresh токеном. Сервер проверяет refresh токен и, если он действителен, выдает новый access токен.

  4. Безопасность: Refresh токен имеет более длительный срок действия, но его необходимо хранить безопасно, чтобы предотвратить несанкционированный доступ. Если refresh токен скомпрометирован, злоумышленник может получить новые access токены.

Пример обновления сессии

import requests
​
# URL для обновления токена
refresh_url = "https://example.com/api/token/refresh"
​
# Refresh токен, который хранится безопасно
refresh_token = "your_refresh_token_here"
​
# Заголовки запроса
headers = {
    "Content-Type": "application/json"
}
​
# Тело запроса с refresh токеном
data = {
    "refresh_token": refresh_token
}
​
# Отправка POST-запроса для обновления токена
response = requests.post(refresh_url, headers=headers, json=data)
​
# Проверка успешности запроса
if response.status_code == 200:
    # Получение нового access токена из ответа
    new_access_token = response.json().get("access_token")
    print("Новый access токен:", new_access_token)
else:
    print("Ошибка обновления токена:", response.status_code)
  • refresh_url: URL-адрес API, который обрабатывает обновление токенов.
  • refresh_token: Refresh токен, который отправляется на сервер для получения нового access токена.
  • headers: Заголовки HTTP-запроса, указывающие, что данные передаются в формате JSON.
  • data: Тело запроса, содержащее refresh токен.
  • requests.post: Отправка POST-запроса на сервер для обновления токена.
  • response.status_code: Проверка статуса ответа для определения успешности операции.
  • response.json().get("access_token"): Извлечение нового access токена из ответа сервера.

Тема: HTTP / API
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки