423 lines
85 KiB
HTML
423 lines
85 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 или на внешнем портале осуществляется по логину и паролю. Вы можете реализовать регистрацию и авторизацию пользователей через..." />
|
||
<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> > Примеры модулей интеграции с ELMA365 / Пользовательский модуль для авторизации через сторонние сервисы</p>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="topic__title"><h1 class="p_Heading1"><span class="f_Heading1">Пользовательский модуль OAuth2 для авторизации через сторонние сервисы</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 class="p_Normal">По умолчанию авторизация пользователей в ELMA365 или на <a href="service-portal.html" class="topiclink">внешнем портале</a> осуществляется по логину и паролю. Вы можете реализовать регистрацию и авторизацию пользователей через сторонние сервисы, например, соцсети, учётные записи Google или Яндекс. Для этого необходимо создать и настроить <a href="extentions.html" class="topiclink">пользовательский модуль</a> OAuth2. После подключения модуля новый способ авторизации станет доступен в ELMA365. Также вы сможете подключить модуль к каждому порталу компании. <span style="font-family: Inter;">Кроме того, вы можете настроить </span><span style="font-family: Inter; color: #0563c1;"><a href="external-oauth2-integration.html#inbox-auth-module" class="topiclink">модуль для авторизации при подключении почты</a></span><span style="font-family: Inter;">.</span></p>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">начало внимание</span></p>
|
||
<p class="p_Normal">Создавать и настраивать модули могут только пользователи, включённые в группу <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="create-module" class="hmanchor"></a><span class="f_Heading2">Создание и настройка модуля</span></h2>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">Чтобы создать новый модуль, перейдите </span>в <span style="font-weight: bold;">Администрирование > Модули</span>,<span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;"> нажмите кнопку </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">+ Модуль </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">и в открывшемся окне выберите опцию </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">Создать</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">. Заполните информацию о модуле и нажмите кнопку </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">Создать</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">. Подробнее читайте в статье </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; color: #0563c1;"><a href="create-extention.html" class="topiclink">«Создание модуля».</a></span></p>
|
||
<h3 class="p_Heading3"><a id="add-mandatory-parameters" class="hmanchor"></a><span class="f_Heading3">Добавление обязательных настроек</span></h3>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;">Добавьте в модуль OAuth2 обязательные настройки. Это глобальные параметры, которые будут использоваться в скриптах модуля.</span></p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;">Перейдите на вкладку </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold; background-color: #ffffff;">Настройки</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;">, нажмите </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold; background-color: #ffffff;">+ Добавить</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;"> и создайте необходимое количество свойств, в которых будут храниться значения настроек.</span></p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;">Отображаемые названия свойств могут быть произвольными. Имена же свойств должны совпадать с именами, указанными ниже в скобках, поскольку они используются для распознавания типа модуля.</span></p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;">Для корректной работы модуля авторизации в системе обязательно добавьте следующие свойства типа <a href="360009707032.html#string" class="topiclink">Строка</a>:</span></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-size: 13px; font-family: 'Segoe UI',Tahoma,Verdana,Arial,sans-serif; font-weight: bold; color: #303030;">ID приложения</span><span style="font-size: 13px; font-family: 'Segoe UI',Tahoma,Verdana,Arial,sans-serif; color: #303030;"> (</span><code><b>client_id</b></code><span style="font-size: 13px; font-family: 'Segoe UI',Tahoma,Verdana,Arial,sans-serif; color: #303030;">) — и</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">дентификатор приложения на стороне внешнего сервиса, которое будет запрашивать данные для авторизации. Выдаётся при </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; color: #0070c0;"><a href="external-oauth2-integration.html#external-service-registration" class="topiclink">регистрации приложения</a> </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">в стороннем сервисе; </span></li><li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">Защищённый ключ</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;"> (</span><code><b>client_secret</b></code><span style="font-size: 12px; font-family: Consolas; color: #1f1f1f; background-color: #ffffff;">)</span><span style="font-size: 13px; font-family: 'Segoe UI',Tahoma,Verdana,Arial,sans-serif; color: #303030;"> — </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">секретный ключ приложения. Выдаётся при регистрации приложения в стороннем сервисе. Вместе с </span><code><b>client_id</b></code><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;"> используется для получения токена доступа к API стороннего сервиса; </span></li><li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">Адрес аутентификации</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;"> (</span><code><b>auth_url</b></code><span style="font-size: 13px; font-family: 'Segoe UI',Tahoma,Verdana,Arial,sans-serif; color: #303030;">) — </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">адрес страницы авторизации в стороннем сервисе, на которую пользователь будет перенаправлен из приложения; </span></li><li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 13px; font-family: 'Segoe UI',Tahoma,Verdana,Arial,sans-serif; font-weight: bold; color: #303030;">Адрес получения токена</span><span style="font-size: 12px; font-family: Consolas; color: #1f1f1f; background-color: #ffffff;"> (</span><code><b>token_url</b></code><span style="font-size: 12px; font-family: Consolas; color: #1f1f1f; background-color: #ffffff;">)</span><span style="font-size: 13px; font-family: 'Segoe UI',Tahoma,Verdana,Arial,sans-serif; color: #303030;"> — адрес на стороне сервиса, на который будет отправлен запрос для получения ключа доступа к API (access‑токена)</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">. В запросе указываются </span><code><b>client_id</b></code><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;"> и </span><code><b>client_secret</b></code><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">;</span></li><li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 13px; font-family: 'Segoe UI',Tahoma,Verdana,Arial,sans-serif; font-weight: bold; color: #303030;">Права доступа </span><span style="font-size: 12px; font-family: Consolas; color: #1f1f1f; background-color: #ffffff;">(</span><code><b>scopes</b></code><span style="font-size: 12px; font-family: Consolas; color: #1f1f1f; background-color: #ffffff;">)</span><span style="font-size: 13px; font-family: 'Segoe UI',Tahoma,Verdana,Arial,sans-serif; color: #303030;"> — права доступа, которые будут предоставлены приложению в стороннем сервисе по access‑токену. </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">Названия прав доступа разделяются пробелом. Обязательно необходимо запрашивать доступ к сведениям, которые позволяют однозначно идентифицировать пользователя, например, к адресу электронной почты; </span></li><li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><a id="automatic-sign-up" class="hmanchor"></a><span style="font-weight: bold;">Автоматическая регистрация</span> (<code><b>auto_signup</b></code>) — свойство типа <a href="360009707032.html#yes_no" class="topiclink">Выбор «да/нет»</a>. Если параметр установлен в значение <span style="font-weight: bold;">Да</span>, внутренние или внешние пользователи, которые ранее отсутствовали в системе, автоматически добавятся в ELMA365 при авторизации. В этом случае в карточке пользователя отобразится только его электронный адрес.</li></ul>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;">Вы можете добавить свои свойства, их имена могут быть любыми.</span></p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;">Если все свойства указаны, перейдите на вкладку </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold; background-color: #ffffff;">Основные</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;"> и нажмите </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold; background-color: #ffffff;">Сохранить</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;">.</span></p>
|
||
<h3 class="p_Heading3"><span class="f_Heading3">Настройка страницы подключения модуля</span></h3>
|
||
<p class="p_Normal">По умолчанию все созданные настройки добавляются на страницу подключения модуля. Пользователь увидит их, нажав на название модуля в разделе <span style="font-weight: bold;">Администрирование</span>.</p>
|
||
<p class="p_Normal">Рекомендуем отображать на странице подключения только те параметры, значения которых вводятся пользователем при настройке модуля. Чтобы узнать, какие параметры настраиваются вручную, а какие задаются по умолчанию, обратитесь к документации для разработчиков сервиса сторонней авторизации. </p>
|
||
<p class="p_Normal">Рассмотрим настройку страницы подключения на примере модуля для авторизации через Google. Список его параметров приведён в предыдущем разделе. По умолчанию все они отображаются на странице модуля. </p>
|
||
<p style="background: #ffffff; margin: 0 0 7px 0;">Чтобы страница подключения содержала только настройки, задаваемые пользователем вручную, выполните следующие действия:</p>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="1" style="background: #ffffff; margin-top: 0; margin-right: 0; margin-bottom: 7px;">На странице модуля перейдите на вкладку <span style="font-weight: bold;">Настройка</span> и нажмите кнопку <span style="font-weight: bold;">Изменить форму</span>. Откроется дизайнер интерфейсов, в котором необходимо <a href="extention-settings.html" class="topiclink">отредактировать форму</a> настроек модуля. </li></ol>
|
||
<p style="background: #ffffff; margin: 0 0 7px 36px;"><img alt="oauth2-authorization-1" width="807" height="330" style="margin:0;width:807px;height:330px;border:none" src="oauth2-authorization-1.png"/></p>
|
||
<ol style="list-style-type:upper-roman" start="2">
|
||
<li value="2" style="background: #ffffff; margin-top: 0; margin-right: 0; margin-bottom: 7px;">Удалите стандартную форму элемента: выберите виджет, нажмите на значок корзины и подтвердите удаление.</li><li value="3" style="background: #ffffff; margin-top: 0; margin-right: 0; margin-bottom: 7px;">Так как свойства <span style="font-weight: bold;">ID приложения</span> (<code><b>client_id</b></code>) и <span style="font-weight: bold;">Защищённый ключ</span> (<code><b>client_secret</b></code>) заполняются вручную, вынесите их на форму. Для этого справа откройте вкладку <span style="font-weight: bold;">Свойства</span> и перетащите их на поле для моделирования.</li><li value="4" style="background: #ffffff; margin-top: 0; margin-right: 0; margin-bottom: 7px;">Сделайте добавленные поля обязательными для заполнения. Для этого выберите нужное свойство на поле для моделирования и нажмите значок шестерёнки. В окне настроек укажите обязательность и нажмите <span style="font-weight: bold;">Сохранить</span>.</li></ol>
|
||
<p style="background: #ffffff; margin: 0 0 7px 36px;"><img alt="oauth2-authorization-2" width="903" height="464" style="margin:0;width:903px;height:464px;border:none" src="oauth2-authorization-2.png"/></p>
|
||
<ol style="list-style-type:upper-roman" start="5">
|
||
<li value="5" style="background: #ffffff; margin-top: 0; margin-right: 0; margin-bottom: 7px;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;">На верхней панели дизайнера интерфейсов нажмите </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold; background-color: #ffffff;">Опубликовать</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;">.</span></li></ol>
|
||
<p style="background: #ffffff; margin: 0 0 7px 34px;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;">Теперь на странице подключения модуля отобразятся только параметры, которые указываются вручную.</span></p>
|
||
<p style="background: #ffffff; margin: 0 0 7px 36px;"><img alt="oauth2-authorization-3" width="600" height="247" style="margin:0;width:600px;height:247px;border:none" src="oauth2-authorization-3.png"/></p>
|
||
<ol style="list-style-type:upper-roman" start="6">
|
||
<li value="6" style="background: #ffffff; margin-top: 0; margin-right: 0; margin-bottom: 7px;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">Для остальных параметров задайте значения по умолчанию. Для этого в настройках модуля перейдите на вкладку </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">Настройки</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">, нажмите на название свойства и в открывшемся окне укажите значение в поле </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">По умолчанию</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">.</span></li></ol>
|
||
<p style="background: #ffffff; margin: 0 0 7px 34px;"><img alt="oauth2-authorization-4" width="568" height="516" style="margin:0;width:568px;height:516px;border:none" src="oauth2-authorization-4.png"/></p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 34px;"><span style="font-size: 15px; font-family: Inter;">Например, в модуле авторизации Google задайте следующие значения: </span></p>
|
||
<ul style="list-style-type:disc">
|
||
<li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><code><b>auth_url</b></code><span style="font-size: 15px; font-family: Inter; font-weight: bold;"> </span><span style="font-size: 15px; font-family: Inter;">— </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">https://accounts.google.com/o/oauth2/v2/auth</span><span style="font-size: 15px; font-family: Inter;">;</span></li></ul>
|
||
<ul style="list-style-type:disc">
|
||
<li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><code><b>token_url</b></code><span style="font-size: 15px; font-family: 'Courier New',Courier,monospace; font-weight: bold;"> </span><span style="font-size: 15px; font-family: Inter;">— </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">https://www.googleapis.com/oauth2/v4/token</span><span style="font-size: 15px; font-family: Inter;">;</span></li></ul>
|
||
<ul style="list-style-type:disc">
|
||
<li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><code><b>scopes</b></code><span style="font-size: 13px;"> </span>для авторизации через Google<span style="font-size: 15px; font-family: Inter;"> — </span><span style="font-size: 15px; font-weight: bold;">https://www.googleapis.com/auth/userinfo.email</span><span style="font-size: 15px;">;</span></li></ul>
|
||
<ul style="list-style-type:disc">
|
||
<li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><code><b>scopes</b></code><span style="font-size: 13px;"> </span>для авторизации в <a href="external-oauth2-integration.html#inbox-auth-module" class="topiclink">почтовом сервисе</a> Gmail <span style="font-size: 15px; font-family: Inter;">— </span><span style="font-size: 15px; font-family: Helvetica,'Helvetica Light',Roboto,Arial,sans-serif; font-weight: bold;">https://mail.google.com/ https://www.googleapis.com/auth/gmail.send</span><span style="font-size: 15px; font-family: Inter;">.</span></li></ul>
|
||
<ol style="list-style-type:upper-roman" start="7">
|
||
<li value="7" style="background: #ffffff; margin-top: 0; margin-right: 0; margin-bottom: 7px;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">В настройках модуля перейдите на вкладку </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">Основные</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;"> и нажмите </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">Сохранить</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">. </span></li></ol>
|
||
<h3 class="p_Heading3"><span class="f_Heading3">Добавление скрипта </span></h3>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;">На следующем шаге в модуль нужно добавить скрипт. В нём считываются значения настроек модуля, затем из них формируется запрос на авторизацию. Он отправляется на сторонний сервис, который возвращает идентификатор пользователя. Идентификатор сравнивается со значением в базе данных ELMA365, и при совпадении пользователь авторизуется в системе. </span></p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;">Внутри скрипта отправка запроса и получение ответа от стороннего сервиса реализованы в методе </span><code><b>oauth2_profile</b></code><span style="font-size: 13px;">. </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;">Обратите внимание, что имя метода менять нельзя, поскольку в системе он используется для распознавания типа модуля.</span></p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">Чтобы добавить скрипт:</span></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-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">На странице модуля перейдите на вкладку </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; color: #0563c1;"><a href="extention-api.html" class="topiclink">Методы API</a></span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;"> и нажмите </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">Редактировать</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">. Откроется редактор методов. </span></li><li value="2" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">Перейдите на вкладку </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">Скрипты</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;"> и напишите код по следующему шаблону:</span></li></ol>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">interface AccessTokenData { // Структура данных для хранения access-токена стороннего сервиса</span><br />
|
||
<span class="f_CodeExample"> access_token: string;</span><br />
|
||
<span class="f_CodeExample"> refresh_token: string;</span><br />
|
||
<span class="f_CodeExample"> token_type: string;</span><br />
|
||
<span class="f_CodeExample"> expires_in: number;</span><br />
|
||
<span class="f_CodeExample">}</span><br />
|
||
<span class="f_CodeExample"> </span><br />
|
||
<span class="f_CodeExample">interface OAuth2Profile { // Структура данных для хранения идентификатора пользователя</span><br />
|
||
<span class="f_CodeExample"> </span><br />
|
||
<span class="f_CodeExample"> user_id: string;</span><br />
|
||
<span class="f_CodeExample">}</span><br />
|
||
<span class="f_CodeExample"> </span><br />
|
||
<span class="f_CodeExample">interface OAuth2ResponseFail { // Структура данных для хранения сообщения об ошибке</span><br />
|
||
<span class="f_CodeExample"> error: string;</span><br />
|
||
<span class="f_CodeExample"> error_description: string; </span><br />
|
||
<span class="f_CodeExample">}</span><br />
|
||
<span class="f_CodeExample"> </span><br />
|
||
<span class="f_CodeExample">async function oauth2_profile (tokenData: AccessTokenData): Promise<OAuth2Profile | OAuth2ResponseFail> {</span><br />
|
||
<span class="f_CodeExample"> // Код метода, который возвращает идентификатор пользователя, или текст ошибки из OAuth2-провайдера</span><br />
|
||
<span class="f_CodeExample">}</span></p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;"> <a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A1')">Пример скрипта для модуля авторизации через Google</a></span></p>
|
||
<div id="TOGGLE0186A1" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; line-height: 1.28; padding: 0 0 0 0; margin: 0 0 11px 0;"><table style="border:none; border-spacing:0;">
|
||
<tr>
|
||
<td style="vertical-align:top; padding:0; border:none"><p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">interface AccessTokenData {</span><br />
|
||
<span class="f_CodeExample"> access_token: string;</span><br />
|
||
<span class="f_CodeExample"> refresh_token: string;</span><br />
|
||
<span class="f_CodeExample"> token_type: string;</span><br />
|
||
<span class="f_CodeExample"> expires_in: number;</span><br />
|
||
<span class="f_CodeExample">}</span><br />
|
||
<span class="f_CodeExample"> </span><br />
|
||
<span class="f_CodeExample">interface OAuth2Profile {</span><br />
|
||
<span class="f_CodeExample"> user_id: string;</span><br />
|
||
<span class="f_CodeExample"> email: string;</span><br />
|
||
<span class="f_CodeExample">}</span><br />
|
||
<span class="f_CodeExample"> </span><br />
|
||
<span class="f_CodeExample">interface OAuth2ResponseFail {</span><br />
|
||
<span class="f_CodeExample"> error: string;</span><br />
|
||
<span class="f_CodeExample"> error_description: string;</span><br />
|
||
<span class="f_CodeExample">}</span><br />
|
||
<span class="f_CodeExample"> </span><br />
|
||
<span class="f_CodeExample">// logout interface</span><br />
|
||
<span class="f_CodeExample">interface OAuth2LogoutResponse {</span><br />
|
||
<span class="f_CodeExample"> redirect_url: string;</span><br />
|
||
<span class="f_CodeExample">}</span><br />
|
||
<span class="f_CodeExample"> </span><br />
|
||
<span class="f_CodeExample"> </span><br />
|
||
<span class="f_CodeExample">async function oauth2_profile (tokenData: AccessTokenData): Promise<OAuth2Profile | OAuth2ResponseFail> {</span><br />
|
||
<span class="f_CodeExample"> const resp = await fetch(`https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=${tokenData.access_token.toString()}`)</span><br />
|
||
<span class="f_CodeExample"> </span><br />
|
||
<span class="f_CodeExample"> if (resp.ok) {</span><br />
|
||
<span class="f_CodeExample"> const result = await resp.json()</span><br />
|
||
<span class="f_CodeExample"> return <OAuth2Profile>{</span><br />
|
||
<span class="f_CodeExample"> user_id: result.id.toString(),</span><br />
|
||
<span class="f_CodeExample"> email: result.email.toString()</span><br />
|
||
<span class="f_CodeExample"> }</span><br />
|
||
<span class="f_CodeExample"> }</span><br />
|
||
<span class="f_CodeExample"> else {</span><br />
|
||
<span class="f_CodeExample"> return <OAuth2ResponseFail>{</span><br />
|
||
<span class="f_CodeExample"> error: "user_not_found",</span><br />
|
||
<span class="f_CodeExample"> error_description: await resp.text()</span><br />
|
||
<span class="f_CodeExample"> }</span><br />
|
||
<span class="f_CodeExample"> }</span><br />
|
||
<span class="f_CodeExample">}</span><br />
|
||
<span class="f_CodeExample">// logout</span><br />
|
||
<span class="f_CodeExample">async function oauth2_logout(): Promise<OAuth2LogoutResponse | OAuth2ResponseFail> {</span><br />
|
||
<span class="f_CodeExample"> return <OAuth2LogoutResponse> {</span><br />
|
||
<span class="f_CodeExample"> redirect_url: "https://www.google.com/accounts/Logout" </span><br />
|
||
<span class="f_CodeExample"> };</span><br />
|
||
<span class="f_CodeExample">}</span></p>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<ol style="list-style-type:upper-roman" start="3">
|
||
<li value="3" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">Сохраните и опубликуйте скрипт. </span></li></ol>
|
||
<h3 class="p_Heading3"><a id="external-service-registration" class="hmanchor"></a><span class="f_Heading3">Настройка на стороне внешнего сервиса</span></h3>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Inter;">Для работы модуля авторизации необходимо настроить веб-приложение на стороне провайдера и связать его с модулем. Рассмотрим создание приложения на примере интеграции с Google:</span></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-size: 15px; font-family: Inter;">Перейдите в </span><span style="font-size: 15px; font-family: Inter; color: #0563c1;"><a href="https://console.cloud.google.com/apis/dashboard" target="_blank" class="weblink">Google Cloud Platform</a></span><span style="font-size: 15px; font-family: Inter;">.</span></li><li value="2" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">Создайте проект или выберите существующий. Подробнее о создании проектов читайте в </span><span style="font-size: 15px; font-family: Inter; color: #0563c1;"><a href="https://developers.google.com/workspace/guides/create-project?hl=ru" target="_blank" class="weblink">официальной документации Google</a></span><span style="font-size: 15px; font-family: Inter;">.</span></li><li value="3" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">Настройте страницу запроса разрешений. Подробнее читайте в </span><span style="font-size: 15px; font-family: Inter; color: #0563c1;"><a href="https://developers.google.com/workspace/guides/configure-oauth-consent?hl=ru" target="_blank" class="weblink">официальной документации Google</a></span><span style="font-size: 15px; font-family: Inter;">.</span></li><li value="4" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">Перейдите в раздел </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Credentials</span><span style="font-size: 15px; font-family: Inter;">, в верхней части страницы нажмите </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">+Create credentials</span><span style="font-size: 15px; font-family: Inter;"> и в выпадающем меню выберите </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">OAuth client ID</span><span style="font-size: 15px; font-family: Inter;">.</span></li><li value="5" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">В поле </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Application type</span><span style="font-size: 15px; font-family: Inter;"> выберите </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Web application</span><span style="font-size: 15px; font-family: Inter;"> и укажите название приложения.</span></li><li value="6" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">В блоке </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Authorized redirect URIs</span><span style="font-size: 15px; font-family: Inter;"> нажмите </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">+Add URI</span><span style="font-size: 15px; font-family: Inter;"> и введите адрес, на который пользователь перенаправится при успешной авторизации. Формат адреса: </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;"><host>/_oauth2/post-message</span><span style="font-weight: bold;">?provider=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</span>. В качестве <span style="font-weight: bold;"><host></span> вставьте адрес вашей компании ELMA365. В качестве ID провайдера используйте идентификатор модуля. Чтобы получить его, откройте страницу модуля и в адресной строке браузера скопируйте набор символов после “ext_”.</li></ol>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">начало примечание</span></p>
|
||
<p class="p_Normal"><span style="font-weight: bold;">Примечание</span></p>
|
||
<p class="p_Normal">Чтобы пользователь мог войти в ELMA365, используя как базовый адрес компании, так и дополнительный (алиас), в настройках на стороне внешнего сервиса укажите два соответствующих URL‑адреса для перенаправления.</p>
|
||
<p style="background: #f7f7f7; margin: 7px 0 7px 0;">Если вы настраиваете интеграцию с <a href="external-oauth2-integration.html#inbox-auth-module" class="topiclink">почтовым сервисом</a>, введите адрес для перенаправления в формате <span style="font-weight: bold;"><host>/_oauth2/post-message</span>.</p>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">конец примечание</span></p>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="7" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">Нажмите </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Create</span><span style="font-size: 15px; font-family: Inter;">.</span></li><li value="8" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">В открывшемся окне скопируйте значения </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Client ID</span><span style="font-size: 15px; font-family: Inter;"> и </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Client secret</span><span style="font-size: 15px; font-family: Inter;">.</span></li><li value="9" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">Перейдите в ELMA365, откройте страницу модуля и включите его.</span></li><li value="10" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">Вставьте в поле </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">ID приложения</span><span style="font-size: 15px; font-family: Inter;"> значение </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Client ID</span><span style="font-size: 15px; font-family: Inter;">, в поле </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Защищённый ключ</span><span style="font-size: 15px; font-family: Inter;"> — </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Client secret</span><span style="font-size: 15px; font-family: Inter;">.</span></li></ol>
|
||
<p class="p_Normal" style="margin: 0 0 0 34px;"><img alt="oauth2-authorization-8" width="729" height="300" style="margin:0;width:729px;height:300px;border:none" src="oauth2-authorization-8.png"/></p>
|
||
<ol style="list-style-type:upper-roman" start="11">
|
||
<li value="11" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">Сохраните настройки.</span></li></ol>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Inter;">Модуль готов к использованию. Теперь пользователи смогут войти в ELMA365 с помощью учётной записи подключённого сервиса, если OAuth2‑авторизация разрешена в </span><span style="font-size: 15px; font-family: Inter; color: #0563c1;"><a href="security_settings.html" class="topiclink">настройках безопасности</a></span><span style="font-size: 15px; font-family: Inter;">.</span></p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Inter;">Вы также можете настроить вход через сторонний сервис для </span><span style="font-size: 15px; font-family: Inter; color: #0563c1;"><a href="portal-login-page.html" class="topiclink">внешнего портала</a></span><span style="font-size: 15px; font-family: Inter;">. Работа модуля при авторизации клиентов на портале описана в разделе </span><span style="font-size: 15px; font-family: Inter; color: #0563c1;"><a href="external-oauth2-integration.html#example" class="topiclink">«Пример работы модуля для входа на портал»</a></span><span style="font-size: 15px; font-family: Inter;">.</span></p>
|
||
<h2 class="p_Heading2"><span class="f_Heading2">Настройка logout в модуле OAuth2 </span></h2>
|
||
<p class="p_Normal">Для обеспечения дополнительной безопасности вы можете настроить механизм <span style="font-weight: bold;">logout</span> в пользовательском модуле OAuth2. С помощью этого механизма пользователь, выходя из профиля в ELMA365, также будет выходить из привязанной учётной записи настроенного провайдера.</p>
|
||
<p class="p_Normal">Чтобы настроить механизм <span style="font-weight: bold;">logout</span> в модуле, выполните следующие действия: </p>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="1" class="p_Normal">На странице модуля перейдите на вкладку <a href="extention-api.html" class="topiclink">Методы API</a> и нажмите <span style="font-weight: bold;">Редактировать</span>. Откроется редактор методов.</li><li value="2" class="p_Normal">Перейдите на вкладку <span style="font-weight: bold;">Скрипты</span> и подключите интерфейс <span style="font-weight: bold;">logout</span>: </li></ol>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample" style="font-weight: bold;">interface</span><span class="f_CodeExample"> OAuth2LogoutResponse {</span><br />
|
||
<span class="f_CodeExample"> redirect_url: string;</span><br />
|
||
<span class="f_CodeExample">}</span></p>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="3" class="p_Normal">Затем реализуйте метод <code><b>oauth2_logout</b></code>: </li></ol>
|
||
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">async </span><span class="f_CodeExample" style="font-weight: bold;">function</span><span class="f_CodeExample"> oauth2_logout(): Promise<OAuth2LogoutResponse | OAuth2ResponseFail> {</span><br />
|
||
<span class="f_CodeExample"> </span><span class="f_CodeExample" style="font-weight: bold;">return</span><span class="f_CodeExample"> <OAuth2LogoutResponse> {</span><br />
|
||
<span class="f_CodeExample"> redirect_url: "https://my_idp.com/logout" </span><br />
|
||
<span class="f_CodeExample"> };</span><br />
|
||
<span class="f_CodeExample">}</span></p>
|
||
<p class="p_Normal">В качестве параметра <code><b>redirect_url</b></code> укажите адрес настроенного провайдера. На указанный адрес из ELMA365 будет отправляться запрос о выходе из учётной записи. </p>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="4" class="p_Normal">Сохраните и опубликуйте скрипт.</li></ol>
|
||
<p class="p_Normal">После этого пользователь, нажавший кнопку <span style="font-weight: bold;">Выйти</span> в ELMA365, будет перенаправлен на страницу выхода из учётной записи в настроенном провайдере OAuth2. </p>
|
||
<p class="p_Normal">Также вы можете настроить на стороне провайдера OAuth2 обратную переадресацию на страницу авторизации в ELMA365 после выхода из системы. </p>
|
||
<h2 class="p_Heading2"><a id="link" class="hmanchor"></a><span class="f_Heading2">Привязка учётной записи OAuth2 к профилю в скриптах </span></h2>
|
||
<p class="p_Normal">С помощью скриптов вы можете управлять привязкой профиля пользователя ELMA365 к учётной записи настроенного провайдера OAuth2. Для этого доступны следующие методы: </p>
|
||
<ul style="list-style-type:disc">
|
||
<li class="p_Normal"><code><b>createWithAuthData</b></code> — метод позволяет создать нового пользователя в ELMA365 и автоматически связать его с существующей учётной записью в провайдере OAuth2. Добавленные с помощью данного метода пользователи сразу получают <a href="360004833572.html" class="topiclink">статус</a> <span style="font-weight: bold;">Активный</span>. </li></ul>
|
||
<p class="p_Normal" style="margin: 0 0 0 35px;">Обратите внимание, пользователь, добавленный таким способом, сможет авторизоваться в ELMA365 только с помощью провайдера OAuth2. Другие методы авторизации будут недоступны; </p>
|
||
<ul style="list-style-type:disc">
|
||
<li class="p_Normal"><code><b>addOAuth2Data</b></code> — метод позволяет привязать к профилю существующего в ELMA365 пользователя учётную запись настроенного провайдера OAuth2. После привязки пользователь сможет авторизоваться в ELMA365, используя данные провайдера. Данный метод аналогичен ручному добавлению учётной записи провайдера OAuth2 в настройках профиля пользователя на вкладке <a href="360016398552.html#authentication" class="topiclink">Аутентификация</a>; </li><li class="p_Normal"><code><b>removeOAuth2Data</b></code> — метод позволяет отвязать учётную запись провайдера OAuth2 от профиля пользователя ELMA365. Данный метод аналогичен ручному удалению учётной записи из профиля пользователя. </li></ul>
|
||
<p class="p_Normal">Подробнее о работе с перечисленными методами читайте в справке ELMA365 TS SDK в статье <a href="https://tssdk.elma365.com/ru/latest/interfaces/_03_globals_.users.html#createwithauthdata" target="_blank" class="weblink">«Объект пользователей»</a>.</p>
|
||
<h2 class="p_Heading2"><a id="inbox-auth-module" class="hmanchor"></a><span class="f_Heading2">Настройка модуля для авторизации в почтовых сервисах</span></h2>
|
||
<p style="margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Inter;">Модуль OAuth2 можно использовать при настройке интеграции с почтовым ящиком в </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; color: #0563c1;"><a href="inbox.html" class="topiclink">линиях</a></span><span style="font-size: 15px; font-family: Inter;"> и при подключении </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; color: #0563c1;"><a href="email-workspace.html" class="topiclink">персональной почты</a></span><span style="font-size: 15px; font-family: Inter;"> к профилю пользователя. В этом случае не требуется ввод пароля от почты в ELMA365 — авторизация происходит на стороне почтового сервиса, что обеспечивает удобство для пользователя и дополнительную безопасность учётных данных.</span></p>
|
||
<p style="margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Inter;">Чтобы модуль подходил для привязки почтового ящика, добавьте в него обязательные свойства. Для этого перейдите к управлению модулем, затем на вкладке </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Настройки</span><span style="font-size: 15px; font-family: Inter;">:</span></p>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="1" style="margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">Создайте свойства типа </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; background-color: #ffffff;"><a href="360009707032.html#string" class="topiclink">Строка</a></span><span style="font-size: 15px; font-family: Inter;">, обязательные для любого модуля OAuth2. При этом укажите имена свойств, приведённые ниже в скобках, поскольку они используются для распознавания типа модуля:</span><ul style="list-style-type:disc">
|
||
<li style="margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter; font-weight: bold;">ID приложения</span><span style="font-size: 15px; font-family: Inter;"> (</span><code><b>client_id</b></code><span style="font-size: 15px; font-family: Inter;">);</span></li><li style="margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Защищённый ключ</span><span style="font-size: 15px; font-family: Inter;"> (</span><code><b>client_secret</b></code><span style="font-size: 15px; font-family: Inter; background-color: #ffffff;">);</span></li><li style="margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Адрес аутентификации</span><span style="font-size: 15px; font-family: Inter;"> (</span><code><b>auth_url</b></code><span style="font-size: 15px; font-family: Inter;">);</span></li><li style="margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Адрес получения токена</span><span style="font-size: 15px; font-family: Inter; background-color: #ffffff;"> (</span><code><b>token_url</b></code><span style="font-size: 15px; font-family: Inter; background-color: #ffffff;">);</span></li><li style="margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Права доступа </span><span style="font-size: 15px; font-family: Inter; background-color: #ffffff;">(</span><code><b>scopes</b></code><span style="font-size: 15px; font-family: Inter; background-color: #ffffff;">)</span><span style="font-size: 15px; font-family: Inter;">.</span></li></ul></li></ol>
|
||
<p style="margin: 0 0 11px 34px;"><span style="font-size: 15px; font-family: Inter;">Подробное описание свойств приведено </span><span style="font-size: 15px; font-family: Inter; color: #0000ff;"><a href="external-oauth2-integration.html#add-mandatory-parameters" class="topiclink">выше</a></span><span style="font-size: 15px; font-family: Inter;">.</span></p>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="2" style="margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">Добавьте свойство типа </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Строка</span><span style="font-size: 15px; font-family: Inter;">, уникальное для модулей авторизации в почте — </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Тип авторизации</span><br />
|
||
<span style="font-size: 15px; font-family: Inter;">(</span><code><b>auth_type</b></code><span style="font-size: 15px; font-family: Inter;">). В нём указывается используемый метод авторизации — OAUTHBEARER или XOAuth2, возможные значения —</span><span style="font-size: 15px; font-family: Inter; font-weight: bold;"> bearer</span><span style="font-size: 15px; font-family: Inter;"> и </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">xoauth2</span><span style="font-size: 15px; font-family: Inter;">. Если поле оставлено пустым или введено некорректное значение, по умолчанию используется метод OAUTHBEARER. Рекомендуем использовать XOAuth2 для провайдеров Яндекс Почта и Mail.ru</span><span style="font-size: 11px; font-family: Inter;">.</span></li></ol>
|
||
<p class="p_Normal" style="margin: 0 0 0 34px;">Вы можете установить в настройках свойства значение по умолчанию, чтобы не указывать тип авторизации вручную на странице подключения модуля.</p>
|
||
<p style="margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Inter;">Добавление скриптов для работы модуля не требуется.</span></p>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Inter;">После включения модуля его можно использовать при подключении почтового ящика в профиле пользователя и в настройках линий. Подробнее читайте в статьях </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; color: #0563c1;"><a href="https://elma365.com/ru/help/crm/connect-email.html" target="_blank" class="weblink">«</a><a href="connect-email.html#oauth2" class="topiclink">Подключить почту»</a></span><span style="font-size: 15px; font-family: Inter;"> и </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; color: #0563c1;"><a href="inbox.html#oauth2" class="topiclink">«Подключить электронную почту к линии»</a></span><span style="font-size: 15px; font-family: Inter;">.</span></p>
|
||
<h2 class="p_Heading2"><a id="example" class="hmanchor"></a><span class="f_Heading2">Пример работы модуля для входа на портал</span></h2>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">Рассмотрим подробнее использование модуля для сервиса Google на примере регистрации и авторизации на внешнем портале компании. О том, как создать такой модуль, читайте в разделе <a href="external-oauth2-integration.html#create-module" class="topiclink">«Создание и настройка модуля»</a>.</span></p>
|
||
<h3 class="p_Heading3"><span class="f_Heading3">Предварительная настройка</span></h3>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-size: 15px; font-family: Inter;">Чтобы пользователь мог входить на внешний портал с помощью учётной записи стороннего сервиса, нужно указать модуль OAuth2 в </span><span style="font-size: 15px; font-family: Inter; color: #0563c1;"><a href="portal-login-page.html#authorization" class="topiclink">настройках авторизации портала</a></span><span style="font-size: 15px; font-family: Inter;">:</span></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-size: 15px; font-family: Inter;">Перейдите в раздел, в котором настроен портал.</span></li><li value="2" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">Нажмите на портал в левом меню и на открывшейся странице выберите значок шестерёнки рядом с его названием.</span></li><li value="3" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">В окне настройки на вкладке </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Авторизация</span><span style="font-size: 15px; font-family: Inter;"> разрешите OAuth2-авторизацию и добавьте созданный модуль в список провайдеров.</span></li></ol>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 34px;"><img alt="oauth2-authorization-5" width="532" height="530" style="margin:0;width:532px;height:530px;border:none" src="oauth2-authorization-5.png"/></p>
|
||
<p style="margin: 0 0 11px 34px;"><span style="font-size: 15px; font-family: Inter;">В целях безопасности можно запретить вход на портал по логину и паролю. Для этого в поле </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Разрешить вход по логину / паролю </span><span style="font-size: 15px; font-family: Inter;">установите переключатель в положение </span><span style="font-size: 15px; font-family: Inter; font-weight: bold;">Нет</span><span style="font-size: 15px; font-family: Inter;">. В этом случае пользователи смогут авторизоваться на портале только через сторонний сервис.</span></p>
|
||
<ol style="list-style-type:upper-roman" start="4">
|
||
<li value="4" style="margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Inter;">Сохраните настройки портала.</span></li></ol>
|
||
<h3 class="p_Heading3"><span class="f_Heading3">Принцип работы модуля</span></h3>
|
||
<p class="p_Normal">Разберём, как работает модуль: </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-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">Клиент, который ранее не использовал портал, переходит по ссылке-приглашению и в окне регистрации нажимает </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">Использовать другой метод для регистрации</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">.</span></li></ol>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 35px;"><img alt="oauth2-authorization-9" width="1004" height="490" style="margin:0;width:1004px;height:490px;border:none" src="oauth2-authorization-9.png"/></p>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="2" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">В окне доступных сторонних сервисов выбирает опцию </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">Google OAuth2</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">.</span></li></ol>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 36px;"><img alt="oauth2-authorization-10" width="920" height="511" style="margin:0;width:920px;height:511px;border:none" src="oauth2-authorization-10.png"/></p>
|
||
<ol style="list-style-type:upper-roman">
|
||
<li value="3" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">В открывшемся окне авторизации Google указывает нужный аккаунт и входит в него.</span></li><li value="4" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">Затем пользователь разрешает доступ к данным учётной записи.</span></li></ol>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 37px;"><img alt="oauth2-authorization-11" width="881" height="488" style="margin:0;width:881px;height:488px;border:none" src="oauth2-authorization-11.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-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">Появляется окно приглашения на портал, в котором пользователь вводит фамилию, имя и отчество и нажимает </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">Сохранить</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">. </span></li><li value="6" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;">Регистрация завершена. В следующий раз при авторизации на портале пользователь нажимает </span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif; font-weight: bold;">Войти другим способом</span><span style="font-size: 15px; font-family: Calibri,Vectora,'Droid Sans','Open Sans',Frutiger,sans-serif;"> и входит в свой аккаунт Google.</span></li></ol>
|
||
<p style="line-height: 1.28; margin: 0 0 11px 35px;"><img alt="oauth2-authorization-12" width="658" height="393" style="margin:0;width:658px;height:393px;border:none" src="oauth2-authorization-12.png"/></p>
|
||
|
||
<div class="bottom-nav">
|
||
|
||
<a id="prev-link" class="topic__navi_prev" href="external_viewer_intergation.html">
|
||
<span class="bottom-nav__arrow bottom-nav__arrow--prev"></span> <span
|
||
class="bottom-nav__link">external_viewer_intergation.html</span>
|
||
</a>
|
||
|
||
|
||
<a id="next-link" class="topic__navi_next" href="two-factor-integration.html">
|
||
<span class="bottom-nav__link">two-factor-integration.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>
|
||
<script type="text/javascript">
|
||
HMInitToggle('TOGGLE0186A1','hm.type','dropdown','hm.state','0');
|
||
</script>
|
||
</body>
|
||
|
||
</html>
|