Плюсофон OAuth

OAuth — открытый протокол авторизации, который позволяет предоставить третьей стороне ограниченный доступ к защищённым ресурсам пользователя без необходимости передавать ей (третьей стороне) логин и пароль.

Разработчики должны зарегистрировать свое приложение, чтобы использовать oauth. Зарегистрированному приложению присваивается идентификатор клиента и секретный ключ. Секретный ключ клиента должен храниться в тайне и использоваться только между приложением и сервером авторизации Плюсофон.

Авторизация для приложений, имеющих серверную часть

Это самый сложный вариант авторизации, но только он позволяет сервису однозначно установить приложение, обращающееся за авторизацией. Во всех остальных вариантах авторизация происходит полностью на клиенте и по понятным причинам возможна маскировка одного приложения под другое. Это стоит учитывать при внедрении OAuth-аутентификации в API сервисов.

Шаг 1. Авторизация пользователя.

Дать пользователю ссылку на авторизацию, которая перенаправляет пользователя на Плюсофон с дополнительными URL параметрами: https://login.plusofon.ru/authorize

Параметры, которые необходимо передать в URL:

Параметр Описание
client_id ID приложения
redirect_uri URL-адрес, на который пользователи будут отправлены после авторизации
response_type Должен иметь значение «code»

Пример:

https://login.plusofon.ru/authorize?response_type=code&client_id=1001&redirect_uri=https://example.com/callback

Шаг 2. Получение токена доступа.

После того, как пользователь авторизовался, происходит редирект на указанный redirect_uri с дополнительным параметром «code»: https://example.com/callback?code=authCode. Полученный код используется для получения токена доступа путем отправки POST запроса на URL: https://login.plusofon.ru/token.

Параметры:

Параметр Описание
client_id ID приложения
grant_type Должен иметь значение «authorization_code»
code Код, полученный на шаге 1
client_secret Секретный ключ приложения

Ответ в формате JSON будет содержать следующие данные:

Параметр Описание
access_token Токен доступа
token_type Тип ключа
expires_in Время «протухания» токена
refresh_token Токен восстановление предыдущей авторизации

Авторизация полностью клиентских приложений

Этот вариант требует поднятия в приложении окна браузера, но не требует серверной части и дополнительного вызова сервер-сервер для обмена authorization code на access token. Это полезно для полностью клиентских приложений, например, для мобильных приложений.

Шаг 1. Авторизация пользователя.

Дать пользователю ссылку на авторизацию, которая перенаправляет пользователя на Плюсофон с дополнительными URL параметрами: https://login.plusofon.ru/authorize

Параметры, которые необходимо передать в URL:

Параметр Описание
client_id ID приложения
redirect_uri URL-адрес, на который пользователи будут отправлены после авторизации
response_type Должен иметь значение «token»

Шаг 2. Получение токена доступа.

После того, как пользователь авторизовался, происходит редирект на указанный redirect_uri с дополнительными параметрами:

Параметр Описание
access_token Токен доступа
token_type Тип ключа
expires_in Время «протухания» токена
refresh_token Токен восстановление предыдущей авторизации

Пример:

https://example.ru/callback?access_token=accessToken&token_type=bearer&expires_in=86400&refresh_token=refreshToken

Восстановление предыдущей авторизации

Обычно, access token имеет ограниченный срок годности. Это может быть полезно, например, если он передается по открытым каналам. Чтобы не заставлять пользователя проходить авторизацию после истечения срока действия access token’а, во всех перечисленных выше вариантах, в дополнение к access token’у может возвращаться еще refresh token. По нему можно получить access token с помощью HTTP-запроса.

Шаг 1. Получение токена доступа.

Refresh token используется для получения токена доступа путем отправки POST запроса на URL: https://login.plusofon.ru/token.

Параметры:

Параметр Описание
grant_type Должен иметь значение «refresh_token»
refresh_token Refresh token, полученный одним из методов авторизации

Ответ в формате JSON будет содержать следующие данные:

Параметр Описание
access_token Новый токен доступа
token_type Тип ключа
expires_in Время «протухания» токена
refresh_token Новый токен восстановление предыдущей авторизации

Использование токена доступа

Для аутентификации пользователя, в HTTP запросе необходимо передавать заголовок «Authorization»:

curl -H "Authorization: Bearer $TOKEN" https://api.plusofon.ru ...