Клиентская OAuth авторизация

Для использования клиентской OAuth авторизации необходимо включить в настройках приложения клиентскую авторизацию

Клиентская OAuth авторизация

Во время создания приложения требуется указать redirect_uri, который будет использован во время авторизации OAuth:

ТипОписаниеПример
Android SDKokauth://ok{app_id}
вместо [app_id] необходимо подставить id приложения
okauth://ok123456
iOS SDKok{app_id}://authorize
вместо [app_id] необходимо подставить id приложения
ok123456://authorize
ExternalURI, который будет обрабатывать авторизацию.
Можно использовать https://api.ok.ru/blank.html
http://localhost/auth

1. Открытие диалога авторизации OAuth

Для начала процесса авторизации нужно открыть новое окно браузера (или webView) и осуществить переход на специально сформированный URL:

https://connect.ok.ru/oauth/authorize?client_id={clientId}&scope={scope}&response_type={{response_type}}&redirect_uri={redirectUri}&layout={layout}&state={state}

НазваниеОбязательныйОписание
client_idДаИдентификатор приложения {application id}
scopeДаЗапрашиваемые права приложения, разделённые символом. См. права приложения
response_typeДаТип ответа от сервера, укажите token
redirect_uriДаURI, на который будет передан access_token. URI должен посимвольно совпадать с одним из URI, зарегистрированных в настройках приложения.
Часть URI после символа ‘?’ (query) не учитывается при проверке, тем не менее, для передачи динамически изменяющихся данных рекомендуется использовать параметр state.
layoutНетВнешний вид окна авторизации:
* w – (по умолчанию) стандартное окно для полной версии сайта;
* m – окно для мобильной авторизации;
* a – упрощённое окно для мобильной авторизации без шапки.
stateНетПараметр состояния. В неизменном виде пробрасывается в redirect_uri. Позволяет передавать произвольные данные между разными фазами OAuth и защищаться от xsrf.

2. Разрешение прав доступа

Если пользователь ранее выдал приложению все права, указанные в параметре scope, то окно автоматически закрывается и дополнительное подтверждение от пользователя не требуется.

После перехода по сформированному URL пользователь будет должен ввести свой логин и пароль, если ранее он этого не сделал. После входа на сайт ему будет предложено авторизовать приложение и подтвердить запрошенные права:

Показ прав

3. Получение access_token

После подтверждения авторизации пользователь будет перенаправлен на указанный при открытии диалога авторизации redirect_uri, в котором после символа решётки будут переданы параметры access_token и session_secret_key, а так же state в случае если он был указан на этапе 1:

{redirect_uri}#access_token={access_token}&session_secret_key={session_secret_key}&state={state}&permissions_granted={permissions_granted}&expires_in={expires_in}

НазваниеОписание
access_tokenТокен доступа, используемый для формирования запроса к API
session_secret_keyСекретный сессионный ключ, используемый для подписи запроса к API
stateЗначение, которое было передано в параметре state при открытии диалога авторизации
permissions_grantedПрава, выданные пользователем приложению
expires_inВремя действия токена доступа в секундах

В случае ошибки или отказа от авторизации будет передан параметр error, идентифицирующий причину проблемы:

{redirect_uri}#error={error}&state={state}

Возможные ошибки

ОшибкаВарианты возникновения
invalid_request* был передан неверный code
(описание ошибки - Invalid code)
* время действия code истекло
(описание ошибки - Expired code)
* redirect_uri отличается от переданного на этапе OAuth
(описание ошибки - Wrong redirect_uri)
invalid_client* не удалось найти указанное приложение
(описание ошибки - Unknown client)
unauthorized_client* секретный ключ приложения неверен
(описание ошибки - Invalid request parameters)
access_denied* пользователь не авторизовал приложение
(например, удалил его в настройках, описание ошибки - Access denied)
* время действия refesh_token истекло
(описание ошибки - Refresh token expired)
* пользователь принудительно вышел со всех устройств
(см. настройки, описание ошибки - Logout all)
invalid_grant* не удалось распознать параметр grant_type
(описание ошибки - Invalid grant type или Invalid parameters for grant type)
invalid_token* не удалось определить пользователя
(описание ошибки - Session expired)
* refresh_token был передан неверно
(описание ошибки - Invalid refresh token / Invalid refresh token structure / Invalid refresh token, user not found)