322 lines
54 KiB
HTML
322 lines
54 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="ru">
|
||
|
||
<head>
|
||
<title>Внешнее приложение в модулях</title>
|
||
<meta name="generator" content="Help+Manual" />
|
||
<meta name="keywords" content="проверить список подключений и разорвать соединение" />
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<meta name="description" content="В рамках модуля можно подключить внешнее приложение. Оно позволяет разрешить доступ сторонним сервисам к защищённым ресурсам ELMA365 по протоколу авторизации OAuth2." />
|
||
<meta name="picture" content="" />
|
||
<meta property="og:type" content="website" />
|
||
<meta property="og:title" content="Cправка по Low-code платформе ELMA365" />
|
||
<meta property="og:url" content="https://elma365.com/ru/help" />
|
||
<meta property="og:image" content="" />
|
||
<meta property="og:site_name" content="ELMA365" />
|
||
<link rel="icon" href="favicon.png" type="image/png" />
|
||
|
||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
||
<link rel="stylesheet" href="./jquery-ui.min.css" />
|
||
<link rel="stylesheet" href="default.css" />
|
||
<link rel="stylesheet" href="./search-yandex.css" />
|
||
<link rel="stylesheet" href="./article.css" />
|
||
<link rel="stylesheet" href="./glossary.css" />
|
||
<link rel="stylesheet" href="./theme.css" />
|
||
|
||
<script type="text/javascript" src="jquery.js"></script>
|
||
<script type="text/javascript" src="helpman_settings.js"></script>
|
||
<script type="text/javascript" src="helpman_topicinit.js"></script>
|
||
|
||
<script type="text/javascript" src="highlight.js"></script>
|
||
<script type="text/javascript">
|
||
$(document).ready(function(){highlight();});
|
||
</script>
|
||
</head>
|
||
|
||
<body>
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-M6ETBEC1R9"></script><script>window.dataLayer=window.dataLayer || []; function gtag(){dataLayer.push(arguments);}gtag('js', new Date()); gtag('config', 'G-M6ETBEC1R9');</script>
|
||
<script>!function(e,t,c,n,r,a,m){e.ym=e.ym||function(){(e.ym.a=e.ym.a||[]).push(arguments)},e.ym.l=1*new Date;for(var s=0;s<document.scripts.length;s++)if(document.scripts[s].src===n)return;a=t.createElement(c),m=t.getElementsByTagName(c)[0],a.async=1,a.src=n,m.parentNode.insertBefore(a,m)}(window,document,"script","https://mc.yandex.ru/metrika/tag.js"),ym(83179930,"init",{clickmap:!0,trackLinks:!0,accurateTrackBounce:!0,webvisor:!0})</script><noscript><div><img alt=""src=https://mc.yandex.ru/watch/83179930 style=position:absolute;left:-9999px></div></noscript>
|
||
|
||
<header class="header elma-365">
|
||
<div class="container">
|
||
<a class="header__logo" href="https://elma365.com/ru/help">
|
||
<img src="./logo.svg" alt="header logo">
|
||
</a>
|
||
<!-- <div class="hero__search-form" id="search-panel">
|
||
<form class="search-form" onsubmit="ym(83179930,'reachGoal','poisk')">
|
||
<label class="search-form__label">
|
||
<span id="reset-search" class="search__icon"></span>
|
||
<input class="search-form__input" type="text">
|
||
</label>
|
||
<input class="search-form__submit" type="submit" value="Submit">
|
||
</form>
|
||
</div> -->
|
||
|
||
<div class="hero__search-form" id="search-panel"> <form class="search-form"> <label class="search-form__label"> <span id="reset-search" class="search__icon"></span> <input class="search-form__input" type="text"> </label> <input class="search-form__submit" type="submit" value="Submit"> </form> </div>
|
||
<div class="hero__search">
|
||
<a href="#" id="search-icon" class="hero__search-icon">
|
||
<img src="search-icon-white.svg" alt="search string">
|
||
</a>
|
||
<a href="#" id="side-menu-icon" class="hero__side-icon">
|
||
<img src="side_menu.svg" alt="side menu">
|
||
</a>
|
||
</div>
|
||
<div class="header__navi">
|
||
|
||
<ul class="header__list"><li><span class="solution-select"><span class="solution-select__selected"></span><svg width="7" height="4" viewBox="0 0 7 4" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L3.5 3.5L6 1" stroke="white" stroke-linecap="round" stroke-linejoin="round"/></svg><ul class="solution-select__list"><li><a class="project-link" href="https://elma365.com/ru/help/platform/get-trial.html">Платформа</a></li><li><a class="project-link" href="https://elma365.com/ru/help/ecm/ecm-functions.html">ECM</a></li><li><a class="project-link" href="https://elma365.com/ru/help/crm/crm_overview.html">CRM</a></li><li><a class="project-link" href="https://elma365.com/ru/help/service/service-functions.html">Service</a></li><li><a class="project-link" href="https://elma365.com/ru/help/projects/projects-functions.html">Проекты</a></li><li><a class="project-link" href="https://elma365.com/ru/help/business_solutions/-elma365-store.html">Бизнес-решения</a></li></ul></span></li><li><a href="https://api.elma365.com/ru/"target="_blank">API</a></li><li><a href="https://tssdk.elma365.com/"target="_blank">SDK</a></li><li><a href="https://community.elma365.com/" target="_blank">Community</a></li><li><a href="https://elma-academy.com/ru/" target="_blank">Академия</a></li><li><a href="https://elma365.com/ru/" target="_blank">Сайт ELMA365</a></li></ul>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</header>
|
||
|
||
|
||
|
||
|
||
<main class="main container">
|
||
|
||
<aside class="sidebar" id="sidebar">
|
||
<div class="sidebar__header">
|
||
<a class="header__logo" href="https://elma365.com/ru/help">
|
||
<img src="./logo-light.svg">
|
||
</a>
|
||
<span class="sidebar__close elma-365-close" id="close"></span>
|
||
</div>
|
||
<div class="sidebar__wrapper" id="side-menu">
|
||
|
||
</div>
|
||
</aside>
|
||
|
||
<article class="article" id="article">
|
||
<div class="article-inner">
|
||
<div class="content">
|
||
<header class="article__header">
|
||
<div class="article__bread" style="display:flex; gap:10px;">
|
||
<span id="subcategory" class="search-res__item-category search-res__item-category_subcategory subcategory article__badge"></span>
|
||
|
||
<div class="topic__breadcrumbs">
|
||
<p><a href="360024498352.html">Модули расширения системы</a> > <a href="extentions.html">Пользовательские модули</a> / Внешнее приложение в модулях</p>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="topic__title"><h1 class="p_Heading1"><span class="f_Heading1">Внешнее приложение в модулях</span></h1>
|
||
</div>
|
||
|
||
</header>
|
||
<section class="article__content">
|
||
<div class="scroll-top-inner">
|
||
<a href="#h1-article" class="scroll-top"></a>
|
||
</div>
|
||
<!-- Placeholder for topic body. -->
|
||
<p style="margin: 7px 0 7px 0;">В рамках модуля можно подключить внешнее приложение. Оно позволяет разрешить доступ сторонним сервисам к защищённым ресурсам ELMA365 по протоколу авторизации OAuth2.</p>
|
||
<p style="margin: 7px 0 7px 0;">Предоставить доступ к данным из ELMA365 можно компьютерным программам, мобильным приложениям, веб‑сервисам и т. д. Для этого на стороне ELMA365 в модуле создаётся внешнее приложение, при его настройке подключается сторонний сервис и определяется его уровень доступа. </p>
|
||
<p style="margin: 7px 0 7px 0;">После подключения данные из ELMA365 могут служить способом аутентификации на стороннем сервисе, а также источником для обращения через Web API.</p>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">начало внимание</span></p>
|
||
<p style="margin: 7px 0 7px 0;">Создавать и настраивать внешнее приложение могут только <a href="360006871932.html#administrators" class="topiclink">администраторы системы</a>. </p>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">конец внимание</span></p>
|
||
<h2 class="p_Heading2"><a id="main-info" class="hmanchor"></a><span class="f_Heading2">Общий принцип работы внешнего приложения</span></h2>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;">Внешнее приложение осуществляет работу по протоколу авторизации OAuth2 следующим образом: </p>
|
||
<ol style="list-style-type:decimal">
|
||
<li value="1" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;">На стороне ELMA365 в модуле <a href="module-external-app.html#enable-app" class="topiclink">включается внешнее приложение и добавляется шаблон клиента OAuth2/OIDC</a>, по которому определяется предоставляемый уровень доступа. </li><li value="2" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><a href="module-external-app.html#create-client" class="topiclink">Создаётся клиент OAuth2/OIDC</a>, т. е. указываются данные стороннего сервиса, которому разрешается доступ к ресурсам ELMA365. </li></ol>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 36px;">Сервис нужно разработать самостоятельно, реализовав в нём клиентскую часть протокола OAuth2. <span style="background-color: #ffffff;">Технические спецификации и стандарты</span> работы протокола OAuth2 читайте в <a href="https://datatracker.ietf.org/doc/html/rfc6749" target="_blank" class="weblink">документации RFC</a>.</p>
|
||
<ol style="list-style-type:decimal">
|
||
<li value="3" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><a href="module-external-app.html#add-service" class="topiclink">В стороннем сервисе осуществляется подключение к ELMA365</a> по протоколу OAuth2. Соединение выполняется c помощью уникального идентификатора и секрета внешнего приложения, полученных при создании клиента.</li><li value="4" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;">После установки связи пользователь разрешает стороннему сервису доступ с уровнем, указанным в настройках внешнего приложения, через свой аккаунт в ELMA365. </li><li value="5" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;">Генерируется код авторизации и передаётся стороннему сервису. По полученному коду авторизации создаются токен доступа и токен обновления. </li><li value="6" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;">В стороннем сервисе по токену доступа составляются и выполняются запросы на получение ресурсов ELMA365. Токен обновления применяется для генерации нового токена доступа в случае истечения срока его годности.</li><li value="7" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;">Пользователь может <a href="module-external-app.html#check-connections" class="topiclink">проверить список подключений и разорвать соединение</a> в своём профиле.</li></ol>
|
||
<h2 class="p_Heading2"><a id="enable-app" class="hmanchor"></a><span class="f_Heading2">Включить внешнее приложение и создать шаблон доступа</span></h2>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;">Внешнее приложение подключается на стороне ELMA365 в модуле и служит способом интеграции платформы и стороннего сервиса. Соединение ELMA365 со сторонним сервисом осуществляется по протоколу OAuth2. </p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;">Для каждого пользовательского модуля можно создать одно внешнее приложение. При этом через внешнее приложение в модуле можно подключить несколько сервисов. </p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;">При настройке внешнего приложения создаётся <span style="font-weight: bold;">Шаблон клиента OAuth2/OIDC</span>. В нём указывается уровень доступа для стороннего сервиса. Можно предоставить доступ к данным пользователя, Web API или выбрать оба варианта. </p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="background-color: #ffffff;">Созданный шаблон выбирается при подключении стороннего сервиса. Если несколько сервисов подключаются к одному внешнему приложению, вы можете использовать один настроенный шаблон для предоставления одинакового уровня доступа. </span></p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;">Для настройки внешнего приложения выполните следующие действия: </p>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="1" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;">Перейдите в раздел <span style="font-weight: bold;">Администрирование > Модули</span> и выберите созданный <a href="extentions.html" class="topiclink">пользовательский модуль</a>.</li><li value="2" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;">На странице модуля нажмите <span style="font-weight: bold;">Управление</span> и перейдите на вкладку <span style="font-weight: bold;">Внешнее приложение</span>.</li><li value="3" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;">На открывшейся странице выберите <span style="font-weight: bold;">Включить</span>. Создастся внешнее приложение, через которое будет осуществляться подключение стороннего сервиса. </li><li value="4" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;">Название внешнего приложения можно отредактировать. Детали используются для идентификации внешнего приложения, когда пользователь разрешает доступ стороннему сервису на выполнение действий от его аккаунта.</li></ol>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 36px;">Для изменения названия нажмите <span style="font-weight: bold;">Настроить</span>. В открывшемся окне в поле <span style="font-weight: bold;">Наследование</span> снимите флажок с опции <span style="font-weight: bold;">Использовать основные данные модуля</span> и задайте название, описание и иконку для внешнего приложения. Сохраните настройки. </p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 36px;"><img alt="module-external-app-1" width="1030" height="592" style="margin:0;width:1030px;height:592px;border:none" src="module-external-app-1.png"/></p>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="5" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;">После включения внешнего приложения на странице появится блок <span style="font-weight: bold;">Шаблоны клиентов OAuth2/OIDC</span>. Нажмите <span style="font-weight: bold;">+ Создать шаблон</span> и задайте уровень доступа для подключаемых сторонних сервисов:</li></ol>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 36px;"><img alt="module-external-app-2" width="861" height="534" style="margin:0;width:861px;height:534px;border:none" src="module-external-app-2.png"/></p>
|
||
<ul style="list-style-type:disc">
|
||
<li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-weight: bold;">Название</span><span style="font-weight: bold; color: #ff0000;">*</span> — укажите название, которое будет отображаться в списке созданных шаблонов при подключении стороннего сервиса; </li><li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-weight: bold;">Уровни доступа</span><span style="font-weight: bold; color: #ff0000;">*</span> — определите, к каким ресурсам ELMA365 предоставляется доступ стороннему сервису после его подключения: <ul style="list-style-type:circle">
|
||
<li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-weight: bold;">openid</span> — доступ к данным пользователя, который разрешает подключение сервиса к ELMA365. Доступ необходим для выполнения протокола OpenID. Включает информацию об идентификаторе, компании и email. Например, через внешнее приложение с таким уровнем доступа можно запрашивать адреса электронной почты и синхронизировать учётные записи из ELMA365 с аккаунтами пользователей в стороннем сервисе;</li><li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-weight: bold;">api</span> — доступ к выполнению любых операций через <a href="https://api.elma365.com/ru/public-api/guides/IntroWebAPI/" target="_blank" class="weblink">WebAPI</a>. Например, через внешнее приложение можно передавать запросы с стороннего сайта и создавать элементы приложений в ELMA365. </li></ul></li></ul>
|
||
<ol style="list-style-type:upper-roman" start="6">
|
||
<li value="6" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;">Сохраните шаблон клиента. </li></ol>
|
||
<p style="margin: 7px 0 7px 0;"><span style="font-weight: bold;">Важно:</span> при создании шаблона клиента OAuth2/OIDC продумайте, каким образом будет использоваться настроенное внешнее приложение. В зависимости от этого выберите необходимые уровни доступа. При эксплуатации подключённого стороннего сервиса пользователи не смогут самостоятельно изменить набор предоставленных уровней доступа. </p>
|
||
<h2 class="p_Heading2"><a id="create-client" class="hmanchor"></a><span class="f_Heading2">Создать клиента OAuth2/OIDC и подключить его к внешнему приложению </span></h2>
|
||
<p style="margin: 7px 0 7px 0;">После настройки внешнего приложения и шаблона клиента OAuth2/OIDC необходимо указать данные стороннего сервиса, которому разрешается доступ к ресурсам ELMA365.</p>
|
||
<p style="margin: 7px 0 7px 0;">Чтобы подключить сторонний сервис, выполните следующие действия:</p>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="1" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">Перейдите на главную страницу пользовательского модуля, для которого настроено внешнее приложение, и включите модуль. </li><li value="2" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">Разверните блок <span style="font-weight: bold;">Токены</span>, который появится на главной странице модуля. </li><li value="3" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">Нажмите кнопку <span style="font-weight: bold;">+ Создать клиент OAuth/OIDC</span> и заполните данные о подключаемом стороннем сервисе: </li></ol>
|
||
<p style="margin: 7px 0 7px 36px;"><img alt="module-external-app-3" width="900" height="542" style="margin:0;width:900px;height:542px;border:none" src="module-external-app-3.png"/></p>
|
||
<ul style="list-style-type:disc">
|
||
<li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-weight: bold;">Название</span><span style="font-weight: bold; color: #ff0000;">*</span> — введите название подключаемого стороннего сервиса; </li><li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-weight: bold;">Шаблон</span><span style="font-weight: bold; color: #ff0000;">*</span> — выберите любой шаблон клиента OAuth2/OIDC, созданный для внешнего приложения в модуле. С помощью указанного шаблона вы определяете, к каким ресурсам ELMA365 сторонний сервис будет иметь доступ; </li><li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-weight: bold;">Области применения</span> — данные уровней доступа из выбранного вами шаблона клиента OAuth2/OIDC. Показывается для информации;</li><li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-weight: bold;">URI перенаправления</span><span style="font-weight: bold; color: #ff0000;">*</span> — укажите URL стороннего сервиса, по которому код авторизации из ELMA365 будет возвращаться в сервис. Доступна возможность внести несколько URI перенаправления. Для этого нажмите <span style="font-weight: bold;">+ Добавить</span> и заполните поле; </li><li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-weight: bold;">Истекает</span> — отметьте срок действия токенов, по которым выполняется соединение стороннего сервиса и ELMA365. По истечении этого периода работа с сервисом прекращается. Вы сможете создать клиента OAuth2/OIDC повторно и выпустить новые токены. </li></ul>
|
||
<ol style="list-style-type:upper-roman" start="4">
|
||
<li value="4" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;">Сохраните настройки. </li><li value="5" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;">Появится окно с сгенерированными данными внешнего приложения модуля, которые понадобятся для соединения с добавленным клиентом OAuth2/OIDC.</li></ol>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 36px;">Окно показывается только один раз. Посмотреть эти данные повторно нельзя. Скопируйте и сохраните <span style="font-weight: bold;">Уникальный идентификатор приложения</span> и <span style="font-weight: bold;">Секрет приложения</span> и нажмите <span style="font-weight: bold;">Готово</span>. </p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 36px;"><img alt="module-external-app-4" width="838" height="518" style="margin:0;width:838px;height:518px;border:none" src="module-external-app-4.png"/></p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;">Настройки на стороне ELMA365 завершены. Теперь необходимо установить соединение с ELMA365 в стороннем сервисе. </p>
|
||
<h2 class="p_Heading2"><a id="add-service" class="hmanchor"></a><span class="f_Heading2">Подключить сторонний сервис к ELMA365 по протоколу OAuth2</span></h2>
|
||
<p style="margin: 7px 0 7px 0;">Подключение выполняется в стороннем сервисе по протоколу OAuth2 любым способом, который зависит от типа сервиса, набора применяемых инструментов, наличия готовых библиотек с решениями и действующих норм безопасности.</p>
|
||
<p style="margin: 7px 0 7px 0;">Приведём описание одного из возможных способов установки соединения стороннего сервиса и ELMA365:</p>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="1" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">В стороннем сервисе сохраняются <span style="font-weight: bold;">Уникальный идентификатор приложения</span> и <span style="font-weight: bold;">Секрет приложения</span>, полученные при создании клиента OAuth2/OIDC в ELMA365. Данные следует указывать в коде не в явном виде, поскольку это нарушает требования безопасности и не позволяет их оперативно изменять.</li><li value="2" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">В<span style="font-weight: bold;"> </span>стороннем сервисе реализуется перенаправление пользователя на страницу ELMA365. На этой странице пользователь разрешает доступ сервису к ресурсам ELMA365 при запуске передачи данных.</li></ol>
|
||
<p style="text-indent: 1px; margin: 7px 0 7px 35px;">Способ реализации перенаправления:</p>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample"><URL-адрес_ELMA365>/api/o/oauth/v2/authorize/client_id=<Уникальный_идентификатор_приложения>&redirect_uri=<Обратная_ссылка>&scope=<Запрашиваемый_уровень_доступа>&response_type=code&response_mode=query&state=<Ключ_защиты></span></p>
|
||
<p style="margin: 7px 0 7px 36px;">Где:</p>
|
||
<ul style="list-style-type:disc">
|
||
<li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;"><URL-адрес_ELMA365></span> — путь до сервера ELMA365, где включено внешнее приложение в модуле и добавлен клиент OAuth2/OIDC;</li><li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;"><Уникальный_идентификатор_приложения></span> — значение идентификатора, полученное при создании клиента OAuth2/OIDC в ELMA365;</li><li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;"><Обратная_ссылка></span> — ссылка обратного перехода в сторонний сервис после того, как пользователь предоставил разрешение доступа к ресурсам ELMA365;</li><li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;"><Запрашиваемый_уровень_доступа></span> — название запрашиваемого уровня доступа, указанного в шаблоне клиента OAuth2/OIDC: <span style="font-weight: bold;">api</span> или <span style="font-weight: bold;">openid</span>. Если в шаблоне настроено несколько уровней доступа, прописывается каждый из них;</li><li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;"><Ключ_защиты></span> — верификационный ключ защиты, который представляет собой произвольное строковое значение.</li></ul>
|
||
<p style="text-indent: -1px; margin: 7px 0 7px 36px;">Для пользователя страница разрешения доступа стороннему сервису может выглядеть следующим образом:</p>
|
||
<p style="text-indent: -1px; margin: 7px 0 7px 36px;"><img alt="module-external-app-5" width="796" height="485" style="margin:0;width:796px;height:485px;border:none" src="module-external-app-5.png"/></p>
|
||
<p style="margin: 7px 0 7px 0;">После разрешения доступа должен выполняться следующий порядок действий: </p>
|
||
<ul style="list-style-type:disc">
|
||
<li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">по пути из значения <span style="font-weight: bold;"><Обратная_ссылка></span> сторонний сервис принимает приходящие данные;</li><li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">из поля <span style="font-weight: bold;">code</span>, приходящего в ответе, извлекается код авторизации. С его помощью выполняется получение токена доступа и токена обновления.</li></ul>
|
||
<ol style="list-style-type:upper-roman" start="3">
|
||
<li value="3" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">Для выполнения этих действий необходимо:</li></ol>
|
||
<ol style="list-style-type:lower-latin">
|
||
<li value="1" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">составить скрипт, который отправляет в ELMA365 запрос POST:</li></ol>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample"><URL-адрес_ELMA365>/api/o/oauth/v2/token</span></p>
|
||
<ol style="list-style-type:lower-latin" start="2">
|
||
<li value="2" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">в заголовок добавить значение:</li></ol>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">Content-Type:application/x-www-form-urlencoded.</span></p>
|
||
<ol style="list-style-type:lower-latin" start="3">
|
||
<li value="3" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">в теле передать:</li></ol>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">grant_type=authorization_code&code=<Код_авторизации>&client_id=<Уникальный_идентификатор_приложения>&client_secret=<Секрет_приложения>&redirect_uri=<Обратная_ссылка></span></p>
|
||
<p style="margin: 7px 0 7px 36px;">Где:</p>
|
||
<ul style="list-style-type:disc">
|
||
<li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;"><Код_авторизации></span> — код авторизации, полученный в предыдущем действии;</li><li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;"><Уникальный_идентификатор_приложения></span> — значение идентификатора внешнего приложения из ELMA365;</li><li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;"><Секрет_приложения></span> — значение секрета внешнего приложения из ELMA365;</li><li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;"><Обратная_ссылка></span> — ссылка обратного перехода в сторонний сервис.</li></ul>
|
||
<ol style="list-style-type:upper-roman" start="4">
|
||
<li value="4" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">Полученный json-ответ содержит: </li></ol>
|
||
<ul style="list-style-type:disc">
|
||
<li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">в поле <span style="font-weight: bold;">access_token</span> — токен доступа;</li><li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">в поле <span style="font-weight: bold;">refresh_token</span> — токен обновления;</li><li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">в поле <span style="font-weight: bold;">id_token</span> — данные о пользователе в виде строки <a href="https://jwt.io/introduction" target="_blank" class="weblink">JSON Web Token (JWT)</a>. Возвращается, если указан уровень доступа <span style="font-weight: bold;">openid</span>. </li></ul>
|
||
<ol style="list-style-type:upper-roman" start="5">
|
||
<li value="5" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">Получив токен доступа, сторонний сервис запрашивает необходимые ресурсы в ELMA365 по реализованному для этого интерфейсу. </li></ol>
|
||
<p style="margin: 7px 0 7px 0;">По истечении срока действия токена доступа сторонний сервис отправляет запрос, который содержит токен обновления, для получения нового токена доступа.</p>
|
||
<ol style="list-style-type:upper-roman" start="6">
|
||
<li value="6" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">Для обновления токенов необходимо:</li></ol>
|
||
<ol style="list-style-type:lower-latin">
|
||
<li value="1" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">реализовать отправку в ELMA365 запроса <code><b>POST</b></code>: </li></ol>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample"><URL-адрес_ELMA365>/api/o/oauth/v2/token </span></p>
|
||
<ol style="list-style-type:lower-latin">
|
||
<li value="2" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">в заголовок добавить значение:</li></ol>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">Content-Type:application/x-www-form-urlencoded </span></p>
|
||
<ol style="list-style-type:lower-latin">
|
||
<li value="3" style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;">в теле передать: </li></ol>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">grant_type=refresh_token&refresh_token=<Токен_обновления>&client_id=<Уникальный_идентификатор_приложения>&client_secret=<Секрет_приложения></span></p>
|
||
<p style="margin: 7px 0 7px 36px;">Где:</p>
|
||
<ul style="list-style-type:disc">
|
||
<li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;"><Токен_обновления></span> — токен обновления, полученный вместе с токеном доступа;</li><li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;"><Уникальный_идентификатор_приложения></span> — значение идентификатора внешнего приложения из ELMA365, полученный ранее в секретах.</li><li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;"><Секрет_приложения></span> — значение секрета внешнего приложения из ELMA365.</li></ul>
|
||
<p style="margin: 7px 0 7px 0;">Полученный json-ответ будет содержать: в поле <span style="font-weight: bold;">access_token</span> новый токен доступа, в поле <span style="font-weight: bold;">refresh_token</span> новый токен обновления.</p>
|
||
<h2 class="p_Heading2"><a id="data-transfer" class="hmanchor"></a><span class="f_Heading2">Особенности передачи данных</span></h2>
|
||
<p style="margin: 7px 0 7px 0;">Ознакомьтесь с особенностями передачи данных при различных уровнях доступа стороннего сервиса к ресурсам ELMA365:</p>
|
||
<ul style="list-style-type:disc">
|
||
<li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;">доступ к Web API</span> — при выполнении запросов используется токен доступа, полученный для уровня <span style="font-weight: bold;">api</span>. Подробнее о принципе использования токена читайте в <a href="https://api.elma365.com/ru/public-api/guides/WebAPIAuthorization/" target="_blank" class="weblink">справке по публичному API ELMA365</a>;</li><li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-weight: bold;">доступ к данным пользователя</span> — запросы осуществляются по токену доступа уровня <span style="font-weight: bold;">openid</span>. В поле <span style="font-weight: bold;">id_token</span> <span style="background-color: #ffffff;">передаются сериализованные данные по стандарту </span><a href="https://jwt.io/introduction" target="_blank" class="weblink">JSON Web Token (JWT)</a>, содержащие информацию о пользователе: идентификатор, его электронный адрес и название компании. Для декодирования токена можно воспользоваться готовыми решениями для работы с JWT или самостоятельно реализовать алгоритм разбора.</li></ul>
|
||
<h3 class="p_Heading3"><a id="tokens-due-date" class="hmanchor"></a><span class="f_Heading3">Срок действия токенов подключения</span></h3>
|
||
<p style="margin: 7px 0 7px 0;">Срок действия кода авторизации и токенов доступа и обновления ограничен:</p>
|
||
<ul style="list-style-type:disc">
|
||
<li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;">код авторизации</span> — срок действия для одного запроса 10 минут. Он используется единожды для получения других токенов. После этого код считается недействительным, дальнейшие запросы с его использованием отклоняются;</li><li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;">токен доступа</span> — срок действия 10 минут. Токен позволяет выполнять несколько запросов в течение этого времени. По истечении срока действия он будет недоступен. Новый токен доступа запрашивается с помощью токена обновления;</li><li style="margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-weight: bold;">токен обновления</span> — срок действия 14 дней. По истечении этого времени необходимо получить новые токены доступа и обновления. Для этого пользователь должен запустить процесс авторизации повторно и разрешить доступ стороннему сервису к ELMA365.</li></ul>
|
||
<h2 class="p_Heading2"><a id="check-connections" class="hmanchor"></a><span class="f_Heading2">Посмотреть список выданных разрешений</span></h2>
|
||
<p style="margin: 7px 0 7px 0;">Если в стороннем сервисе реализовано соединение с ELMA365, пользователь может запустить передачу данных. После этого он перенаправляется на страницу разрешения доступа сервису к ресурсам ELMA365. </p>
|
||
<p style="margin: 7px 0 7px 0;">Все выданные разрешения и установленные соединения фиксируются в ELMA365. Пользователь может просмотреть список предоставленных доступов и отозвать их в настройках своего профиля, на вкладке <span style="font-weight: bold;">Внешние приложения</span>. </p>
|
||
<p style="text-align: justify; margin: 7px 0 7px 0;">Подробнее об этом читайте в статье <a href="360016398552.html#external-apps" class="topiclink">«Настройки профиля пользователя»</a>.</p>
|
||
|
||
<div class="bottom-nav">
|
||
|
||
<a id="prev-link" class="topic__navi_prev" href="portable-services.html">
|
||
<span class="bottom-nav__arrow bottom-nav__arrow--prev"></span> <span
|
||
class="bottom-nav__link">portable-services.html</span>
|
||
</a>
|
||
|
||
|
||
<a id="next-link" class="topic__navi_next" href="module-soap-service.html">
|
||
<span class="bottom-nav__link">module-soap-service.html</span> <span
|
||
class="bottom-nav__arrow bottom-nav__arrow--next"></span>
|
||
</a>
|
||
|
||
</div>
|
||
<!-- добавляет на страницу строку блок Была ли статья полезной? -->
|
||
<div class="feedback-wrap"><div class="feedback" id="feedback"><span><b>Была ли статья полезной?</b></span><form action="" method="POST" class="feedback-form" id="feedback-form"><div class="feedback__popup feedback__popup-response" id="feedback__popup_thx">Спасибо за ваш отзыв!</div><div id="feedback-success-popup"><div class="wrap"><button type="button" class="feedback-popup-close">×</button><svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_212_2187)"><path d="M22 0.6875C10.2294 0.6875 0.6875 10.2294 0.6875 22C0.6875 33.7706 10.2294 43.3125 22 43.3125C33.7706 43.3125 43.3125 33.7706 43.3125 22C43.3125 10.2294 33.7706 0.6875 22 0.6875ZM22 40.5625C11.8023 40.5625 3.4375 32.3078 3.4375 22C3.4375 11.8024 11.6922 3.4375 22 3.4375C32.1977 3.4375 40.5625 11.6922 40.5625 22C40.5625 32.1976 32.3078 40.5625 22 40.5625ZM34.1713 16.933L18.6613 32.3186C18.257 32.7197 17.604 32.7171 17.203 32.3128L9.82283 24.873C9.42176 24.4686 9.42434 23.8157 9.82867 23.4146L10.5609 22.6884C10.9652 22.2873 11.6181 22.2899 12.0192 22.6942L17.9468 28.6697L31.9926 14.7366C32.3969 14.3356 33.0498 14.3382 33.4509 14.7425L34.1772 15.4747C34.5783 15.879 34.5757 16.532 34.1713 16.933Z" fill="#27AE60"></path></g><defs><clipPath id="clip0_212_2187"><rect width="44" height="44" fill="white"></rect></clipPath></defs></svg><p>Ваш отзыв успешно отправлен!</p><span>Спасибо за обратную связь.</span></div></div><div class="feedback__popup" id="feedback__popup_why"><button type="button" class="feedback-popup-close">×</button><div class="feedback__popup-header">Уточните, почему:</div><input type="radio" name="category" id="bad_recommendation" value="bad_recommendation"><label for="bad_recommendation">Рекомендации не помогли</label><input type="radio" name="category" id="difficult_text" value="difficult_text"><label for="difficult_text">Текст трудно понять</label><input type="radio" name="category" id="no_answer" value="no_answer"><label for="no_answer">Нет ответа на мой вопрос</label><input type="radio" name="category" id="bad_header" value="bad_header"><label for="bad_header">Содержание статьи не соответствует заголовку</label><input type="radio" name="category" id="other_reason" value="other_reason"><label for="other_reason">Другая причина</label></div><div class="feedback__popup" id="feedback__popup-other"><button type="button" class="feedback-popup-close">×</button> <div class="feedback__popup-header">Расскажите, что вам не понравилось в статье:</div><textarea class="feedback__textarea" name="other" id=""></textarea><input type="submit" class="feedback__other-btn" value="Отправить"></div><div class="feedback-form__btn-group"><input type="radio" name="useful" id="feedback__useful_yes" value="true"><label for="feedback__useful_yes"><img src="like.svg"/><span class="feedback-form__btn-group_yes-btn">Да</span></label><input type="radio" name="useful" id="feedback__useful_no" value="false"><label for="feedback__useful_no"><img src="dislike.svg"/><span class="feedback-form__btn-group_no-btn">Нет</span></label></div><select name="category"><option disabled>Выберите вариант</option><option value="bad_recommendation" selected>Рекомендации не помогли</option><option value="difficult_text">Текст трудно понять</option><option value="no_answer">Нет ответа на мой вопрос</option><option value="bad_header">Содержание статьи не соответствует заголовку</option><option value="other_reason">Другая причина</option></select><input type="submit"></form></div></div>
|
||
|
||
</section>
|
||
</div>
|
||
<aside class="article__sidebar" style="display:none">
|
||
<input type="checkbox" />
|
||
<div class="article__arrow"></div>
|
||
<div class="table-of-contents elma365-right" id="toc2Content">
|
||
<h3 class="h3-toc">В этой статье</h3>
|
||
<nav id="toc2"></nav>
|
||
</div>
|
||
</aside>
|
||
</div>
|
||
</article>
|
||
</main>
|
||
<footer class="footer">
|
||
<div class="footer-container">
|
||
<div class="footer-mobile">
|
||
|
||
<ul class="footer-mobile__list"><li><a href="https://api.elma365.com/ru/" target="_blank">API</a></li><li><a href="https://tssdk.elma365.com/" target="_blank">TS SDK</a></li><li><a href="https://community.elma365.com/" target="_blank">Community</a></li><li><a href="https://elma-academy.com/ru/elma365" target="_blank">Академия</a></li></ul><ul class="footer-mobile__list"><li><a href="https://elma365.com/ru/help/platform/get-trial.html">Платформа</a></li><li><a href="https://elma365.com/ru/help/ecm/ecm-functions.html">ECM</a></li><li><a href="https://elma365.com/ru/help/service/service-functions.html">Service</a></li><li><a href="https://elma365.com/ru/help/projects/projects-functions.html">Проекты</a></li></ul>
|
||
|
||
|
||
</div>
|
||
<div class="container">
|
||
<div class="footer-wrap">
|
||
|
||
<div><span class="mobile-question-popup">Отправить фидбэк</span><form method="POST" action class="question__popup question-xs" id="question__popup"><div class="question-wrap"><span class="close"></span><span class="title">Задать вопрос</span><label for="help_question" style="display: none;"></label><textarea name="help_question" id="help_question"></textarea><input type="submit" value="Отправить"></div></form><div class="hidden fade-in question-success-xs">Ваш фидбэк отправлен.</div></div>
|
||
|
||
<div class="footer-flex-b">
|
||
<div class="footer-top">
|
||
<span class="footer-copy">© 2025
|
||
ELMA365
|
||
|
||
|
||
</span>
|
||
|
||
<a href="https://navigator.sk.ru/orn/1122971" target="_blank">
|
||
<img src="sk-resident.svg" alt="sk icon" class="footer-img" width="117" height="34">
|
||
</a>
|
||
|
||
</div>
|
||
<div class="footer-line">
|
||
|
||
<div class="footer-line-copy">
|
||
<span class="footer-copy">© 2025
|
||
ELMA365
|
||
|
||
|
||
</span>
|
||
</div>
|
||
|
||
<ul class="footer-list">
|
||
|
||
<li class="footer-item"><a href="https://elma365.com/ru/" target="_blank" class="footer-link" style="color: #0D4A75;"><img src="browse.svg" alt="browse icon" class="footer-img">elma365.com</a></li><li class="footer-item"><a href="https://www.youtube.com/user/ELMABPM" target="_blank" class="footer-link"><img src="yt.svg" alt="youtube icon" class="footer-img"></a></li><li class="footer-item"><a href="https://vk.com/elma_bpm" target="_blank" class="footer-link"><img src="vk.svg" alt="vk icon" class="footer-img"></a></li><li class="footer-item"><a href="https://t.me/elmaday" target="_blank" class="footer-link"><img src="tg.svg" alt="telegram icon" class="footer-img"></a></li><li class="footer-item"><a href="https://dzen.ru/elma" target="_blank" class="footer-link"><img src="dzen.svg" alt="dzen icon" class="footer-img"></a></li>
|
||
|
||
|
||
<li class="footer-item">
|
||
<a href="https://navigator.sk.ru/orn/1122971" target="_blank">
|
||
<img src="sk-resident.svg" alt="sk icon" class="footer-img" width="117" height="34">
|
||
</a>
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<a href="#" class="arrow-top"></a>
|
||
</div>
|
||
|
||
</footer>
|
||
<!-- <script type="text/javascript" src="jquery1.min.js"></script>-->
|
||
<iframe name="hmnavigation" style="display:none!important"></iframe>
|
||
<!--<script src="./jquery-ui.js"></script> -->
|
||
<script src="./jquery-ui.min.js"></script>
|
||
<!--script src="//cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.min.js" type="text/javascript" charset="utf-8"></script-->
|
||
<script src="./jquery.tocify.min.js"></script>
|
||
<script src="./TypoReporter.min.js"></script>
|
||
<script src="./google-search.js"></script>
|
||
<script src="./main.js"></script>
|
||
</body>
|
||
|
||
</html>
|