Сервис Фреш поддерживает подключение сторонних приложений с возможностью работы от имени пользователя сервиса через эти сторонние приложения.
Возможность работы пользователя обеспечивается механизмом аутентификации в менеджере сервиса с помощью JWT-токенов и дальнейшего их использования при обращении к методам сервиса ExtAPI.
Поддерживается подключение к стороннему приложению существующих и новых пользователей.
Подключение существующих пользователей
Общая схема аутентификации пользователя при авторизации стороннего приложения
Методы провайдера аутентификации
Метод auth
– авторизация приложения после аутентификации пользователя
Предназначен для аутентификации пользователя с последующей передачей кода авторизации стороннему приложению.
Является частью Authorization Code Flow – https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowSteps
Параметры метода:
Параметр | Тип | Описание | Пример |
---|---|---|---|
client_id | Строка | Идентификатор приложения | 1c.cloud |
redirect_uri | Строка | Адрес, на который будет переадресован пользователь после прохождения авторизации. Должен совпадать с redirect_uri, указанным на этапе добавления стороннего приложения. | https://1c.cloud/callback |
response_type | Строка | Тип ответа, который необходимо получить. Поддерживается – code . | code |
state | Строка | Любое значение, которое провайдер вернет на redirect_uri, например UUID запроса. | 786a9b4a-9b4c-4aa5-b626-3df5b0a1b44f |
Пример вызова:
GET https://{{server}}/a/openid/e1cib/oid2op/auth?client_id=1c.cloud&redirect_uri=https%3A%2F%2F1c.cloud%2Fcallback&response_type=code&state=786a9b4a-9b4c-4aa5-b626-3df5b0a1b44f
Открывается окно аутентификации пользователя.
После аутентификации пользователя, пользователь перенаправляется в окно предоставления доступа приложению:
Пользователь может подтвердить доступ или отказаться. При отказе будет выдано:
При подтверждении, пользователь будет перенаправлен в redirect_uri
стороннего приложения.
Далее стороннее приложение с полученным значением code может авторизоваться и запросить токен доступа методом /token
Метод token
– получение токена доступа (access_token
) и токена обновления доступа (refresh_token
)
Для метода token
поддерживаются следующие варианты предоставления (grant_type
):
authorization_code
– для обмена кода доступа на токен при первичной регистрации и подключения уже существующих пользователей после их аутентификацииrefresh_token
– для обновления токенов аутентификации в процессе работы пользователей с общем ЛК.
Для получения access_token приложение выполнит POST-запрос, передав следующие параметры:
Параметр | Тип | Описание |
---|---|---|
client_id | Строка | Идентификатор приложения |
client_secret | Строка | Защищенный ключ приложения |
grant_type | Строка | Тип запрашиваемого ресурса. Значение равно
authorization_code или refresh_token . |
code | Строка | Обязательно при grant_type=authorization_code . Код, полученный после прохождения авторизации |
redirect_uri | Строка | Обязательно при grant_type=authorization_code . Адрес, на который был переадресован пользователь после прохождения авторизации. Должен совпадать с redirect_uri , указанным на этапе подключения приложения. |
refresh_token | Строка | Обязательно при grant_type=refresh_token . Токен обновления доступа. |
В результате выполнения запроса приложение получит JSON c токенами.
или
Вариант запроса токена доступа по токену обновления:
Подключение новых пользователей при регистрации в сервисе
Подключение стороннего приложения доступно:
- Для зарегистрированных пользователей после их аутентификации и авторизации в сервисе Фреш.
- Непосредственно при регистрации новых пользователей в сервисе Фреш.
Вызов программной регистрации с подключением стороннего приложения
Для подключения стороннего приложения сразу при регистрации новых пользователей в сервисе Фреш нужно использовать следующие методы HTTP-сервиса программной регистрации менеджера сервиса:
- authorization_code – запрос кода авторизации.
- send_verification – отправка письма верификации пользователю.
Схема регистрации, аутентификации пользователя и авторизации приложения для работы через токен:
Пример получения токенов доступа и их использования при обращении к ExtAPI
Пример для тестирования на VS-Code с плагином Rest Client по порядку вызова методов с вариантами
Вход в приложения сервиса и менеджер сервиса по токену доступа
Схема SSO-входа пользователя через стороннее приложение
Выполнение SSO-входа пользователя через стороннее приложение
После получения токена доступа для SSO-входа в приложение сервиса или менеджер сервиса браузер пользователя должен выполнить POST-запрос к корневому методу провайдера аутентификации, указав параметры:
cmd
- команда провайдеру аутентификации, может принимать значения:sso
– будет возвращен редирект с установкой одноразовой кукиtoken
– будет возвращен редирект со входом через одноразовый токен доступа. Этот вариант может использоваться, если установка cookie недоступна, например при работе через iframe.
access_token
– токен доступаredirect_uri
– URLприложения сервиса или менеджера сервиса, куда нужно выполнить вход
Настройки для использования команды cmd=token
Для успешного входа в приложения при использовании команды cmd=token
в vrd-файле публикации приложения нужно указать настройку входа с помощью токена доступа в клиент приложения:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system" ... <accessTokenAuthentication> <issuers> <issuer name="ServiceUserID" authenticationClaimName="login" authenticationUserPropertyName="name" keyInformation="-----BEGIN PUBLIC KEY----- Использовать ключ из внешней публикации главного узла для hs-сервиса ext_api -----END PUBLIC KEY-----" </issuers> <accessTokenRecepientName>ApplicationClient</accessTokenRecepientName> </accessTokenAuthentication> </point>
В redirect_uri
поддерживаются якоря, например:
|
Параметр cmd
можно указать в строке вызова, а параметры access_token
и redirect_uri
– в теле запроса в формате urlencoded.
В запросе нужно указать HTTP-заголовок Content-Type: application/x-www-form-urlencoded
Для этого проще всего после получения токена доступа создать HTML-страницу с формой, выполняемой при открытии страницы, и показать ее пользователю в браузере.
Пример HTML-страницы для перенаправления пользователя в приложение
В приведенном коде страницы:
{{server}}
это доменное имя сервера провайдера аутентификации;{{access_token}}
это значение параметраaccess_token (
токен доступа);{{redirect_uri}}
это значение параметраredirect_uri
(URL приложения).
<!DOCTYPE html> <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> <meta http-equiv='pragma' content='no-cache'/> <meta http-equiv='cache-control' content='no-cache'/> <meta http-equiv='expires' content='-1'/> </head> <body onload='document.forms.form.submit()'> <form name='form' action='https://{{server}}/a/openid/e1cib/oid2op?cmd=sso' method='post'> <input type='hidden' name='access_token' value='{{access_token}}'/> <!-- В параметре value указывается токен доступа --> <input type='hidden' name='redirect_uri' value='{{redirect_uri}}'/> <!-- В параметре value указывается URL приложения или менеджера сервиса --> </form> </body> </html>
Результат SSO-входа пользователя через стороннее приложение с помощью токена доступа
При использовании команды cmd=sso
Если адрес перенаправления, указанный в параметре redirect_uri, доступен, и токен доступа действителен, то:
- Будет установлена одноразовая кука
sso_oid2op_auth
. - Будет выполнено перенаправление в приложение, указанное в параметре
redirect_uri
.
Если адрес перенаправления, указанный в параметре redirect_uri
, доступен, а токен доступа недействителен, то:
- Кука
sso_oid2op_auth
не будет установлена. - Будет выполнено перенаправление в приложение, указанное в параметре
redirect_uri
. При этом пользователю будет показано окно аутентификации.
Если адрес перенаправления, указанный в параметре redirect_uri
, недоступен, у пользователя откроется страница недоступности.
При использовании команды cmd=token
Если адрес перенаправления, указанный в параметре redirect_uri, доступен, и токен доступа действителен, то будет выполнено перенаправление в приложение, указанное в параметре redirect_uri
с одноразовым токеном входа в приложение.
Если адрес перенаправления, указанный в параметре redirect_uri
, доступен, а токен доступа недействителен, то будет выполнено перенаправление в приложение, указанное в параметре redirect_uri
. При этом пользователю будет показано окно аутентификации.
Если адрес перенаправления, указанный в параметре redirect_uri
, недоступен, у пользователя откроется страница недоступности.