Внешнее приложение в модулях

В рамках модуля можно подключить внешнее приложение. Оно позволяет разрешить доступ сторонним сервисам к защищённым ресурсам ELMA365 по протоколу авторизации OAuth2.

Предоставить доступ к данным из ELMA365 можно компьютерным программам, мобильным приложениям, веб‑сервисам и т. д. Для этого на стороне ELMA365 в модуле создаётся внешнее приложение, при его настройке подключается сторонний сервис и определяется его уровень доступа.

После подключения данные из ELMA365 могут служить способом аутентификации на стороннем сервисе, а также источником для обращения через Web API.

начало внимание

Создание внешнего приложения в модуле доступно в поставке On-Premises. В поставке SaaS возможность будет включена после обновления системы до версии 2024.2.

Создавать и настраивать внешнее приложение могут только администраторы системы.

конец внимание

Общий принцип работы внешнего приложения

Внешнее приложение осуществляет работу по протоколу авторизации OAuth2 следующим образом:

  1. На стороне ELMA365 в модуле включается внешнее приложение и добавляется шаблон клиента OAuth2/OIDC, по которому определяется предоставляемый уровень доступа.
  2. Создаётся клиент OAuth2/OIDC, т. е. указываются данные стороннего сервиса, которому разрешается доступ к ресурсам ELMA365.

Сервис нужно разработать самостоятельно, реализовав в нём клиентскую часть протокола OAuth2. Технические спецификации и стандарты работы протокола OAuth2 читайте в документации RFC.

  1. В стороннем сервисе осуществляется подключение к ELMA365 по протоколу OAuth2. Соединение выполняется c помощью уникального идентификатора и секрета внешнего приложения, полученных при создании клиента.
  2. После установки связи пользователь разрешает стороннему сервису доступ с уровнем, указанным в настройках внешнего приложения, через свой аккаунт в ELMA365.
  3. Генерируется код авторизации и передаётся стороннему сервису. По полученному коду авторизации создаются токен доступа и токен обновления.
  4. В стороннем сервисе по токену доступа составляются и выполняются запросы на получение ресурсов ELMA365. Токен обновления применяется для генерации нового токена доступа в случае истечения срока его годности.
  5. Пользователь может проверить список подключений и разорвать соединение в своём профиле.

Включить внешнее приложение и создать шаблон доступа

Внешнее приложение подключается на стороне ELMA365 в модуле и служит способом интеграции платформы и стороннего сервиса. Соединение ELMA365 со сторонним сервисом осуществляется по протоколу OAuth2.

Для каждого пользовательского модуля можно создать одно внешнее приложение. При этом через внешнее приложение в модуле можно подключить несколько сервисов.

При настройке внешнего приложения создаётся Шаблон клиента OAuth2/OIDC. В нём указывается уровень доступа для стороннего сервиса. Можно предоставить доступ к данным пользователя, Web API или выбрать оба варианта.

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

Для настройки внешнего приложения выполните следующие действия:

  1. Перейдите в раздел Администрирование > Модули и выберите созданный пользовательский модуль.
  2. На странице модуля нажмите Управление и перейдите на вкладку Внешнее приложение.
  3. На открывшейся странице выберите Включить. Создастся внешнее приложение, через которое будет осуществляться подключение стороннего сервиса.
  4. Название внешнего приложения можно отредактировать. Детали используются для идентификации внешнего приложения, когда пользователь разрешает доступ стороннему сервису на выполнение действий от его аккаунта.

Для изменения названия нажмите Настроить. В открывшемся окне в поле Наследование снимите флажок с опции Использовать основные данные модуля и задайте название, описание и иконку для внешнего приложения. Сохраните настройки.

module-external-app-1

  1. После включения внешнего приложения на странице появится блок Шаблоны клиентов OAuth2/OIDC. Нажмите + Создать шаблон и задайте уровень доступа для подключаемых сторонних сервисов:

module-external-app-2

  • Название* — укажите название, которое будет отображаться в списке созданных шаблонов при подключении стороннего сервиса;
  • Уровни доступа* — определите, к каким ресурсам ELMA365 предоставляется доступ стороннему сервису после его подключения:
    • openid — доступ к данным пользователя, который разрешает подключение сервиса к ELMA365. Доступ необходим для выполнения протокола OpenID. Включает информацию об идентификаторе, компании и email. Например, через внешнее приложение с таким уровнем доступа можно запрашивать адреса электронной почты и синхронизировать учётные записи из ELMA365 с аккаунтами пользователей в стороннем сервисе;
    • api — доступ к выполнению любых операций через WebAPI. Например, через внешнее приложение можно передавать запросы с стороннего сайта и создавать элементы приложений в ELMA365.
  1. Сохраните шаблон клиента.

Важно: при создании шаблона клиента OAuth2/OIDC продумайте, каким образом будет использоваться настроенное внешнее приложение. В зависимости от этого выберите необходимые уровни доступа. При эксплуатации подключённого стороннего сервиса пользователи не смогут самостоятельно изменить набор предоставленных уровней доступа.

Создать клиента OAuth2/OIDC и подключить его к внешнему приложению

После настройки внешнего приложения и шаблона клиента OAuth2/OIDC необходимо указать данные стороннего сервиса, которому разрешается доступ к ресурсам ELMA365.

Чтобы подключить сторонний сервис, выполните следующие действия:

  1. Перейдите на главную страницу пользовательского модуля, для которого настроено внешнее приложение, и включите модуль.
  2. Разверните блок Токены, который появится на главной странице модуля.
  3. Нажмите кнопку + Создать клиент OAuth/OIDC и заполните данные о подключаемом стороннем сервисе:

module-external-app-3

  • Название* — введите название подключаемого стороннего сервиса;
  • Шаблон* — выберите любой шаблон клиента OAuth2/OIDC, созданный для внешнего приложения в модуле. С помощью указанного шаблона вы определяете, к каким ресурсам ELMA365 сторонний сервис будет иметь доступ;
  • Области применения — данные уровней доступа из выбранного вами шаблона клиента OAuth2/OIDC. Показывается для информации;
  • URI перенаправления* — укажите URL стороннего сервиса, по которому код авторизации из ELMA365 будет возвращаться в сервис. Доступна возможность внести несколько URI перенаправления. Для этого нажмите + Добавить и заполните поле;  
  • Истекает — отметьте срок действия токенов, по которым выполняется соединение стороннего сервиса и ELMA365. По истечении этого периода работа с сервисом прекращается. Вы сможете создать клиента OAuth2/OIDC повторно и выпустить новые токены.
  1. Сохраните настройки.
  2. Появится окно с сгенерированными данными внешнего приложения модуля, которые понадобятся для соединения с добавленным клиентом OAuth2/OIDC.

Окно показывается только один раз. Посмотреть эти данные повторно нельзя. Скопируйте и сохраните Уникальный идентификатор приложения и Секрет приложения и нажмите Готово.

module-external-app-4

Настройки на стороне ELMA365 завершены. Теперь необходимо установить соединение с ELMA365 в стороннем сервисе.

Подключить сторонний сервис к ELMA365 по протоколу OAuth2

Подключение выполняется в стороннем сервисе по протоколу OAuth2 любым способом, который зависит от типа сервиса, набора применяемых инструментов, наличия готовых библиотек с решениями и действующих норм безопасности.

Приведём описание одного из возможных способов установки соединения стороннего сервиса и ELMA365:

  1. В стороннем сервисе сохраняются Уникальный идентификатор приложения и Секрет приложения, полученные при создании клиента OAuth2/OIDC в ELMA365. Данные следует указывать в коде не в явном виде, поскольку это нарушает требования безопасности и не позволяет их оперативно изменять.
  2. В стороннем сервисе реализуется перенаправление пользователя на страницу ELMA365. На этой странице пользователь разрешает доступ сервису к ресурсам ELMA365 при запуске передачи данных.

Способ реализации перенаправления:

<URL-адрес_ELMA365>/api/o/oauth/v2/authorize/client_id=<Уникальный_идентификатор_приложения>&redirect_uri=<Обратная_ссылка>&scope=<Запрашиваемый_уровень_доступа>&response_type=code&response_mode=query&state=<Ключ_защиты>

Где:

  • <URL-адрес_ELMA365> — путь до сервера ELMA365, где включено внешнее приложение в модуле и добавлен клиент OAuth2/OIDC;
  • <Уникальный_идентификатор_приложения> — значение идентификатора, полученное при создании клиента OAuth2/OIDC в ELMA365;
  • <Обратная_ссылка> — ссылка обратного перехода в сторонний сервис после того, как пользователь предоставил разрешение доступа к ресурсам ELMA365;
  • <Запрашиваемый_уровень_доступа> — название запрашиваемого уровня доступа, указанного в шаблоне клиента OAuth2/OIDC: api или openid. Если в шаблоне настроено несколько уровней доступа, прописывается каждый из них;
  • <Ключ_защиты> — верификационный ключ защиты, который представляет собой произвольное строковое значение.

Для пользователя страница разрешения доступа стороннему сервису может выглядеть следующим образом:

module-external-app-5

После разрешения доступа должен выполняться следующий порядок действий:

  • по пути из значения <Обратная_ссылка> сторонний сервис принимает приходящие данные;
  • из поля code, приходящего в ответе, извлекается код авторизации. С его помощью выполняется получение токена доступа и токена обновления.
  1. Для выполнения этих действий необходимо:
  1. составить сценарий, который отправляет в ELMA365 запрос POST:

<URL-адрес_ELMA365>/api/o/oauth/v2/token

  1. в заголовок добавить значение:

Content-Type:application/x-www-form-urlencoded.

  1. в теле передать:

grant_type=authorization_code&code=<Код_авторизации>&client_id=<Уникальный_идентификатор_приложения>&client_secret=<Секрет_приложения>&redirect_uri=<Обратная_ссылка>

Где:

  • <Код_авторизации> — код авторизации, полученный в предыдущем действии;
  • <Уникальный_идентификатор_приложения> — значение идентификатора внешнего приложения из ELMA365;
  • <Секрет_приложения> — значение секрета внешнего приложения из ELMA365;
  • <Обратная_ссылка> — ссылка обратного перехода в сторонний сервис.
  1. Полученный json-ответ содержит:
  • в поле access_token — токен доступа;
  • в поле refresh_token — токен обновления;
  • в поле id_token — данные о пользователе в виде строки JSON Web Token (JWT). Возвращается, если указан уровень доступа openid.
  1. Получив токен доступа, сторонний сервис запрашивает необходимые ресурсы в ELMA365 по реализованному для этого интерфейсу.

По истечении срока действия токена доступа сторонний сервис отправляет запрос, который содержит токен обновления, для получения нового токена доступа.

  1. Для обновления токенов необходимо:
  1. реализовать отправку в ELMA365 запроса POST:

<URL-адрес_ELMA365>/api/o/oauth/v2/token 

  1. в заголовок добавить значение:

Content-Type:application/x-www-form-urlencoded 

  1. в теле передать:

grant_type=refresh_token&refresh_token=<Токен_обновления>&client_id=<Уникальный_идентификатор_приложения>&client_secret=<Секрет_приложения>

Где:

  • <Токен_обновления> — токен обновления, полученный вместе с токеном доступа;
  • <Уникальный_идентификатор_приложения> — значение идентификатора внешнего приложения из ELMA365, полученный ранее в секретах.
  • <Секрет_приложения> — значение секрета внешнего приложения из ELMA365.

Полученный json-ответ будет содержать: в поле access_token новый токен доступа, в поле refresh_token новый токен обновления.

Особенности передачи данных

Ознакомьтесь с особенностями передачи данных при различных уровнях доступа стороннего сервиса к ресурсам ELMA365:

  • доступ к Web API — при выполнении запросов используется токен доступа, полученный для уровня api. Подробнее о принципе использования токена читайте в справке по публичному API ELMA365;
  • доступ к данным пользователя — запросы осуществляются по токену доступа уровня openid. В поле id_token передаются сериализованные данные по стандарту JSON Web Token (JWT), содержащие информацию о пользователе: идентификатор, его электронный адрес и название компании. Для декодирования токена можно воспользоваться готовыми решениями для работы с JWT или самостоятельно реализовать алгоритм разбора.

Срок действия токенов подключения

Срок действия кода авторизации и токенов доступа и обновления ограничен:

  • код авторизации — срок действия для одного запроса 10 минут. Он используется единожды для получения других токенов. После этого код считается недействительным, дальнейшие запросы с его использованием отклоняются;
  • токен доступа — срок действия 10 минут. Токен позволяет выполнять несколько запросов в течение этого времени. По истечении срока действия он будет недоступен. Новый токен доступа запрашивается с помощью токена обновления;
  • токен обновления — срок действия 14 дней. По истечении этого времени необходимо получить новые токены доступа и обновления. Для этого пользователь должен запустить процесс авторизации повторно и разрешить доступ стороннему сервису к ELMA365.

Посмотреть список выданных разрешений

Если в стороннем сервисе реализовано соединение с ELMA365, пользователь может запустить передачу данных. После этого он перенаправляется на страницу разрешения доступа сервису к ресурсам ELMA365.

Все выданные разрешения и установленные соединения фиксируются в ELMA365. Пользователь может просмотреть список предоставленных доступов и отозвать их в настройках своего профиля, на вкладке Внешние приложения.

Подробнее об этом читайте в статье «Настройки профиля пользователя».