
OAuth токены представляют собой цифровые ключи, позволяющие приложениям безопасно получать доступ к ресурсам пользователя без передачи его логина и пароля. Существует два основных типа токенов: access token, который предоставляет доступ к данным на ограниченное время, и refresh token, используемый для получения нового access token после истечения срока действия.
Для получения OAuth токена приложение должно пройти процесс авторизации через сервер аутентификации сервиса. Этот процесс включает передачу client ID и client secret, а также запрос прав доступа (scopes), которые определяют, какие действия приложение сможет выполнять от имени пользователя.
Access token обычно хранится в памяти приложения или безопасном хранилище, чтобы минимизировать риск утечки. Для длительных сессий рекомендуется использовать refresh token, который позволяет обновлять access token без повторной авторизации пользователя, уменьшая число запросов на ввод учетных данных.
OAuth токены применяются при работе с API популярных сервисов: Google, Facebook, GitHub, Microsoft. Использование токенов упрощает интеграцию и обеспечивает контроль прав доступа, поскольку можно ограничивать действия приложения конкретными разрешениями и сроком действия токена.
При работе с токенами важно реализовать защиту от перехвата: передача должна осуществляться через HTTPS, токены не должны сохраняться в открытом виде на клиенте, а доступ к refresh token следует ограничивать серверной логикой и строгой авторизацией.
Разница между access token и refresh token

Access token используется для непосредственного доступа к API или ресурсам пользователя. Его срок действия обычно ограничен от нескольких минут до нескольких часов. Access token передается в заголовке запроса, например Authorization: Bearer <token>, и содержит информацию о правах доступа (scopes). После истечения срока действия он становится недействительным и требует обновления.
Refresh token предназначен для получения нового access token без повторной авторизации пользователя. Он хранится более длительное время, иногда до нескольких месяцев, и передается только серверу авторизации. Refresh token не используется напрямую для доступа к ресурсам и должен храниться в безопасном месте, чтобы исключить возможность компрометации учетной записи.
Для безопасной работы с токенами рекомендуется разделять их хранение: access token можно держать в оперативной памяти приложения, а refresh token – в защищенном хранилище на сервере. При использовании refresh token сервер отправляет запрос на получение нового access token, минимизируя риск утечки учетных данных пользователя.
Как получить OAuth токен для стороннего сервиса
Процесс получения OAuth токена для стороннего сервиса включает несколько ключевых шагов, которые обеспечивают безопасную авторизацию приложения без передачи учетных данных пользователя:
- Регистрация приложения на платформе сервиса. Необходимо получить client ID и client secret, а также указать URL перенаправления (redirect URI), куда сервис отправит токен.
- Формирование запроса на авторизацию пользователя. Обычно используется URL вида https://example.com/oauth/authorize?client_id=<ID>&scope=<scopes>&response_type=code&redirect_uri=<URI>, где scopes определяют права доступа.
- Получение кода авторизации (authorization code) после того, как пользователь предоставил разрешения приложению. Этот код действителен короткий промежуток времени.
- Обмен кода авторизации на access token и refresh token. Для этого выполняется POST-запрос к токен-эндпоинту сервиса с указанием client ID, client secret, кода авторизации и redirect URI.
- Сохранение токенов. Access token хранится в памяти приложения или безопасном хранилище на клиенте, refresh token – в защищенном серверном хранилище.
Для повышения безопасности рекомендуется использовать HTTPS для всех запросов, ограничивать права доступа через scopes и обновлять access token только через refresh token, исключая прямую авторизацию пользователя при каждом запросе.
Типы OAuth токенов и их области применения
Существуют два основных типа OAuth токенов: access token и refresh token, а также дополнительные специализированные форматы в некоторых сервисах, например ID token для OpenID Connect.
Access token используется для прямого доступа к API. Он передает информацию о правах доступа и обычно имеет срок действия от нескольких минут до нескольких часов. Подходит для мобильных приложений, одностраничных веб-приложений и серверных запросов к API с ограниченным временем сессии.
Refresh token применяется для получения нового access token после истечения его срока действия. Он хранится на сервере или в безопасном хранилище и обеспечивает долгосрочный доступ без повторной авторизации пользователя. Рекомендуется для серверных приложений и сервисов, которым нужен постоянный доступ к ресурсам пользователя.
ID token встречается в OpenID Connect и используется для идентификации пользователя, а не для доступа к ресурсам. Он содержит информацию о пользователе в формате JWT и позволяет приложению проверить личность пользователя без запроса пароля.
Выбор типа токена зависит от сценария использования: для краткосрочного доступа к API – access token, для поддержания сессии без вмешательства пользователя – refresh token, для аутентификации и передачи данных о пользователе – ID token.
Срок действия токена и его обновление

Access token имеет ограниченный срок действия, обычно от нескольких минут до нескольких часов. После истечения срока токен становится недействительным, и любые запросы к API с его использованием будут отклонены с ошибкой 401 или 403.
Для продления доступа используется refresh token. Сервер приложения отправляет POST-запрос на токен-эндпоинт сервиса с refresh token, client ID и client secret. В ответ сервер возвращает новый access token и, при необходимости, новый refresh token.
Рекомендуется хранить время истечения access token и автоматически инициировать обновление за 1–2 минуты до окончания срока действия, чтобы исключить прерывание сессии пользователя. Все обновления должны выполняться через защищенное соединение HTTPS, а refresh token хранить только на серверной стороне.
Некоторые сервисы поддерживают ограничение количества использований refresh token или его аннулирование при смене пароля пользователя. Поэтому важно отслеживать ошибки при обновлении токена и предусматривать обработку повторной авторизации пользователя при необходимости.
Использование токена для доступа к API

Для обращения к API с использованием OAuth токена необходимо передавать access token в каждом запросе. Наиболее распространенный способ – добавление токена в заголовок HTTP:
| Метод | Пример |
|---|---|
| Authorization header | Authorization: Bearer <access_token> |
| URL параметр | ?access_token=<access_token> |
Использование заголовка Authorization предпочтительно, так как передача токена в URL может быть зафиксирована в логах и кэшах, повышая риск утечки. Access token должен быть валиден и соответствовать запрошенным scopes, иначе сервер вернет ошибку 403.
Для обеспечения непрерывной работы приложения рекомендуется проверять срок действия токена и заранее обновлять его с помощью refresh token. Также стоит ограничивать права токена минимально необходимыми для выполнения конкретных операций с API.
Методы защиты токенов от утечки
Для минимизации риска компрометации OAuth токенов следует использовать безопасное хранение и передачу данных. Access token рекомендуется держать в памяти приложения или в защищенном клиентском хранилище, например Secure Storage на мобильных устройствах, а refresh token – только на серверной стороне.
Все запросы с токенами должны выполняться через HTTPS для предотвращения перехвата трафика. Никогда не включайте токены в URL при перенаправлениях, так как они могут сохраняться в логах или кэше браузера.
Ограничение прав доступа через scopes снижает последствия возможной утечки: токен предоставляет только необходимые разрешения. Также рекомендуется внедрять ротацию токенов и использовать короткие сроки действия access token, чтобы при компрометации доступ был ограничен временем.
Мониторинг аномальной активности и немедленное аннулирование подозрительных токенов помогают предотвращать злоупотребления. Для серверных приложений важно реализовать строгие правила доступа к refresh token и хранить их в зашифрованной базе данных.
Ошибки при работе с OAuth токенами и их устранение

Неправильное указание scopes при получении токена приводит к отказу в доступе к определенным ресурсам (ошибка 403). Решение – пересоздать токен с корректным набором прав.
Передача токена через URL вместо заголовка Authorization может привести к его утечке через логи или кэш браузера. Исправляется использованием заголовка Authorization: Bearer <token> и хранением токена в безопасном месте.
Ошибка при обмене authorization code на access token возникает при несоответствии redirect URI, client ID или client secret. Необходимо сверить все параметры с настройками приложения на платформе сервиса и повторить запрос.
Неправильное хранение refresh token на клиенте увеличивает риск компрометации учетной записи. Рекомендуется хранить refresh token только на сервере, шифровать его и ограничивать доступ к базе данных с токенами.
Вопрос-ответ:
В чем разница между access token и refresh token?
Access token предоставляет временный доступ к API и ресурсам пользователя, обычно действителен от нескольких минут до нескольких часов. Refresh token хранится дольше и используется для получения нового access token без повторной авторизации пользователя. Access token передается в заголовке запроса к API, а refresh token хранится на сервере и не применяется напрямую для доступа к данным.
Как безопасно хранить OAuth токены в приложении?
Access token рекомендуется держать в памяти приложения или в защищенном хранилище клиента, например Secure Storage на мобильных устройствах. Refresh token хранится только на сервере в зашифрованной базе данных. Все запросы с токенами должны выполняться через HTTPS, а права доступа токенов ограничиваются минимально необходимыми scopes.
Что делать, если access token истек?
Если access token истек, сервер возвращает ошибку 401 или 403. Для восстановления доступа следует использовать refresh token, отправив запрос на токен-эндпоинт сервиса с указанием client ID, client secret и refresh token. Сервер вернет новый access token, после чего можно продолжить работу с API без повторной авторизации пользователя.
Можно ли использовать OAuth токен для идентификации пользователя?
Для идентификации применяется ID token, который встречается в OpenID Connect. Он содержит данные о пользователе в формате JWT и позволяет приложению проверить личность пользователя. Access token и refresh token предназначены для доступа к ресурсам, а не для передачи информации о пользователе.
