В этом руководстве описаны OAuth-авторизация и токены, которые использует Application. Кто такие Partner, Application (Client) и User, см. Partner, приложение и пользователь.
Поток авторизации
Когда Application должна действовать от имени User, User должен предоставить доступ через OAuth:
sequenceDiagram
actor User
participant App as Application
participant OLX as OLX
App->>User: 1. Показывает ссылку аутентификации OLX
(/oauth/authorize)
User->>OLX: 2. Открывает ссылку в браузере, входит
и принимает Application
OLX->>User: 3. Перенаправление браузера с authorization_code
User->>App: 4. Браузер переходит на redirect_uri
с authorization_code
App->>OLX: 5. Обмен authorization_code на токены
(grant_type: authorization_code)
OLX->>App: access_token, refresh_token
Note over App: Хранит токены только для этого User.
User их не видит.
Операции
После авторизации User работает только с Application. Application вызывает OLX API с сохранённым access_token. User никогда не отправляет и не получает этот токен:
sequenceDiagram
actor User
participant App as Application
participant API as OLX API
User->>App: 1. Инициирует действие
(без OLX access_token)
Note right of User: напр. опубликовать это предложение на OLX
App->>API: 2. API-запрос с access_token
напр. POST /adverts
Note over App,API: access_token используется здесь
(только Application ↔ OLX API)
Токен остаётся в Application
User не отправляет и не получает его
API->>App: 3. Ответ API
успех / ошибка
App->>User: 4. Показывает результат User
(без OLX access_token)
Токены, которые использует Application
В процессе авторизации участвуют следующие элементы:
Контекст User — токен в контексте конкретного User
Используется, когда Application действует от имени User (продавец / lister).
authorization_code— одноразовый код, который Application получает после того, как User предоставил доступ к учётной записи OLX. Application обменивает этот код наaccess_tokenиrefresh_token.access_token— токен, который Application отправляет с API-запросами от имени этого User. Имеет ограниченный срок (см.expires_inв ответе токена). Когда он истекает, Application используетrefresh_tokenдля новогоaccess_token. Сaccess_tokenUser Application может публиковать объявления, читать статусы, получать сообщения и выполнять другие действия в scope пользователя. Токен для User John Doe нельзя использовать для User Jane Humbug — запасы каждого User остаются отдельными.refresh_token— токен, используемый в контексте User для получения новогоaccess_tokenпосле истечения предыдущего. Живёт дольше access token. Его можно использовать до истечения или аннулирования. Поток refresh может вернуть новыйrefresh_token— сохраните его и используйте самый новый. Еслиrefresh_tokenистечёт или станет недействительным, User должен снова пройти авторизацию для новогоauthorization_codeи новыхaccess_tokenиrefresh_token.
Контекст Client — токен в контексте Application
Получается с grant type client_credentials. Эти токены не имеют контекста User. Они используются для операций, не требующих данных User — например категории, локации и другие общие данные между Users.
access_token— токен, который Application отправляет с API-запросами в контексте Application (Client). Также имеет ограниченный срок; по истечении Application запрашивает новый сclient_id/client_secretиgrant_type: client_credentials. В этом потоке нетrefresh_token. Этот токен не может действовать от имени User — только получает доступ к общим ресурсам.client_id/client_secret— учётные данные Application из Developer Portal. Вместе сgrant_type: client_credentialsиспользуются для получения токена в контексте Client. (client_credentials— название grant type, а не сам secret.)
grant_type: authorization_code
(+ refresh_token later)
публикация / управление объявлениями
сообщения, статусы, …
отдельные запасы на User
grant_type: client_credentials
(без User)
категории, города / локации
другие ресурсы без контекста пользователя
не может действовать как User
Подробности запросов, endpoints и scopes — в разделе Authentication документации API.
Чтобы зарегистрироваться как Partner и создать Application, следуйте Получение доступа к API.