Что такое Refresh Token в контексте аутентификации?

«Что такое Refresh Token в контексте аутентификации?» — вопрос из категории Безопасность, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Refresh Token — это долгоживущий учетный токен, используемый в протоколах аутентификации (например, OAuth 2.0, OpenID Connect) для получения нового Access Token без повторного ввода пользовательских учетных данных.

Как это работает (поток OAuth 2.0):

  1. Пользователь входит в систему, и сервер аутентификации выдает пару токенов:
    • Access Token (короткоживущий, например, 15 минут) — для доступа к защищенным ресурсам (API).
    • Refresh Token (долгоживущий, например, 7 дней) — хранится безопасно на стороне клиента.
  2. Когда Access Token истекает, клиентское приложение отправляет Refresh Token на специальную конечную точку (/token).
  3. Сервер проверяет Refresh Token и, если он валентен, выдает новую пару Access и Refresh токенов.

Пример HTTP-запроса для обновления:

POST /oauth/token HTTP/1.1
Host: auth.server.com
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&refresh_token=abc123def456...&client_id=your_client_id

Ключевые характеристики и best practices:

  • Безопасное хранение: Refresh Token должен храниться на стороне сервера (для веб-приложений) или в защищенном хранилище (Keychain/Keystore для мобильных приложений), но НИКОГДА не в браузере (например, localStorage).
  • Отзыв (Revocation): Сервер должен иметь возможность отозвать скомпрометированные Refresh Tokens.
  • Одноразовость: После использования Refresh Token для выдачи новой пары, старый Refresh Token часто аннулируется (реализация "ротации токенов").
  • Узкая область действия (Scope): Refresh Token обычно имеет те же разрешения, что и исходный Access Token.

Зачем это нужно?

  • Безопасность: Короткая жизнь Access Token минимизирует ущерб в случае его утечки.
  • Удобство пользователя: Пользователь остается аутентифицированным долгое время без повторных логинов.
  • Масштабируемость: Позволяет избежать частых проверок учетных данных в основной базе данных.