Токен обновления (refresh token) — это символьная строка, используемая для получения токенов доступа. Токен обновления выдается клиенту сервером авторизации и используется для получения нового токена доступа, когда текущий токен доступа становится недействительным или истекает его срок действия, или для получения дополнительных токенов доступа с идентичной или более узкой областью действия (токены доступа могут иметь более короткий срок службы и меньше разрешений на доступ, чем разрешено владельцем ресурса).
Назначение
Токен обновления играет ключевую роль в системах авторизации, таких как OAuth 2.0, обеспечивая долгосрочный доступ к защищенным ресурсам без необходимости повторной аутентификации пользователя. Его основные задачи:
- Продление сессии: Позволяет поддерживать активную сессию пользователя, не требуя повторного ввода учетных данных.
- Повышение безопасности: Токены доступа имеют короткий срок действия, что снижает риск их использования при утечке. Токен обновления позволяет безопасно получать новые токены доступа.
- Гибкость управления доступом: Может использоваться для получения токенов доступа с различными областями видимости (scopes), что позволяет точно настраивать права доступа.
- Улучшение пользовательского опыта: Уменьшает количество запросов на повторную аутентификацию, делая взаимодействие с приложением более удобным.
Токены обновления применяются в веб-приложениях, мобильных приложениях, API и устройствах Интернета вещей, где требуется долгосрочный доступ к данным.
Как работает
Процесс использования токена обновления включает несколько этапов:
- Получение: После успешной аутентификации пользователя (например, через логин и пароль) сервер авторизации выдает клиенту два токена: токен доступа (access token) и токен обновления (refresh token).
- Использование токена доступа: Клиент использует токен доступа для выполнения запросов к защищенным ресурсам на сервере ресурсов.
- Обновление: Когда токен доступа истекает или становится недействительным, клиент отправляет токен обновления на сервер авторизации, чтобы получить новый токен доступа. В некоторых случаях выдается также новый токен обновления.
- Повторение: Процесс обновления может повторяться до истечения срока действия токена обновления или его отзыва.
Характеристики
- Срок действия: Токены обновления имеют более длительный срок действия, чем токены доступа. Например, токен доступа может действовать 1 час, а токен обновления — 30 дней или год.
- Одноразовость: В некоторых реализациях токен обновления используется только один раз, после чего выдается новый токен обновления. Это повышает безопасность, ограничивая время действия скомпрометированного токена.
- Формат: Обычно это случайная строка, непрозрачная для клиента, которая не содержит читаемой информации.
- Ограничения доступа: Токен обновления не может предоставлять доступ к ресурсам сверх прав, указанных в исходном разрешении на доступ (authorization grant).
- Тип клиента: Доступен как для конфиденциальных (серверных), так и для публичных (мобильных или браузерных) клиентов, но для публичных клиентов требуется дополнительная защита, например, DPoP.
Сравнение с токеном доступа
Токены обновления и доступа имеют разные функции и характеристики:
Характеристика | Токен доступа | Токен обновления |
Назначение | Доступ к защищенным ресурсам | Получение новых токенов доступа |
Срок действия | Короткий (минуты или часы) | Долгий (дни, месяцы или год) |
Использование | Для запросов к серверу ресурсов | Для запросов к серверу авторизации |
Многоразовость | Многоразовый в пределах срока действия | Часто одноразовый (выдается новый) |
Роль в OAuth 2.0
В протоколе OAuth 2.0 токен обновления используется в рамках различных потоков авторизации (grant types), таких как:
- Authorization Code: Токен обновления выдается вместе с токеном доступа после обмена кода авторизации.
- Client Credentials: Токен обновления обычно не используется, так как доступ ограничен клиентом.
- Device Authorization: Токен обновления поддерживает долгосрочный доступ для устройств.
- Resource Owner Password Credentials (устаревший): Токен обновления мог выдаваться, но этот поток не рекомендуется.
Токен обновления выдается сервером авторизации и используется клиентом для обращения к конечной точке /token для получения нового токена доступа. Он связан с исходным разрешением на доступ (authorization grant), что ограничивает его возможности правами, предоставленными пользователем.
Безопасность
Токены обновления повышают безопасность, но требуют осторожного обращения:
- Риски:
- Утечка токена обновления может позволить злоумышленнику получать новые токены доступа до истечения срока действия или отзыва токена.
- Для публичных клиентов (например, мобильных приложений) риск выше, так как токены хранятся в менее защищенных средах.
- Меры защиты:
- Хранение токенов обновления в безопасных местах, таких как серверное хранилище или защищенные клиентские хранилища.
- Использование механизма DPoP (Demonstration of Proof-of-Possession) для подтверждения подлинности клиента и устройства.
- Регулярный отзыв токенов при подозрении на компрометацию.
- Ограничение срока действия токенов обновления (например, 31 день или 1 год).
- Использование HTTPS для защиты передачи токенов.
- Отзыв токенов: Пользователь или система могут отозвать токен обновления, что аннулирует все связанные токены доступа. Например, в системах управления токенами пользователь может отозвать токен через интерфейс.
Применение
Токены обновления используются в различных сценариях:
- Веб-приложения: Для продления сессий без повторного ввода учетных данных.
- Мобильные приложения: Для автоматического обновления доступа в фоновом режиме.
- API: Для обеспечения долгосрочного доступа к данным без хранения логина и пароля.
- Устройства IoT: Для поддержания доступа устройств с ограниченным интерфейсом, использующих поток Device Authorization.
Пример: Мобильное приложение для управления задачами использует токен обновления, чтобы каждые 48 часов получать новый токен доступа, не требуя от пользователя повторного входа.
Управление токенами обновления
Многие системы предоставляют интерфейсы для управления токенами обновления:
- Просмотр: Пользователь может увидеть список токенов, их даты создания и сроки действия.
- Создание: Токены создаются при аутентификации или через специальный интерфейс.
- Отзыв: Пользователь может отозвать токен вручную, что аннулирует все связанные токены доступа.
Пример: В системе управления API пользователь заходит в раздел «Токены доступа», видит список токенов с датами создания и может отозвать любой из них.
Ограничения и особенности
- Срок действия: Обычно ограничен (например, 31 день или 1 год). После истечения требуется повторная аутентификация.
- Привязка к клиенту: Токен обновления связан с конкретным клиентом и не может использоваться другими приложениями.
- Одноразовость: В некоторых системах токен обновления становится недействительным после использования, и выдается новый.
- Ограничение прав: Новый токен доступа не может иметь больше прав, чем исходное разрешение на доступ.
- Зависимость от системы: Некоторые системы (например, Yandex Cloud) используют токены обновления только для определенных типов пользователей, таких как федеративные.
Значение в современных системах
Токен обновления — важный элемент протокола OAuth 2.0, обеспечивающий баланс между безопасностью и удобством. Короткий срок действия токенов доступа снижает риск их компрометации, а токены обновления позволяют продлевать доступ без лишних действий пользователя. С развитием стандартов, таких как DPoP, и расширений OAuth 2.0, токены обновления становятся еще более безопасными и гибкими, что делает их незаменимыми в веб-приложениях, мобильных приложениях и API.