Многие пользователи и администраторы 1С сталкиваются с задачей интеграции системы аутентификации 1С:Предприятие с внешними сервисами. Особенно актуальным становится вопрос, когда необходимо использовать уже существующие учетные записи, например, из почтовых сервисов, таких как Mail.ru, для входа в информационную базу 1С. Ранее это могло казаться сложной задачей, требующей серьезных доработок и "городить кучу" собственной логики. Однако, с развитием платформы 1С:Предприятие, появились новые, более удобные и стандартизированные механизмы.
В этой статье мы подробно рассмотрим, как современная платформа 1С позволяет решить проблему аутентификации с использованием внешних сервисов, включая Mail.ru, используя встроенные возможности и стандартные протоколы. Мы разберем несколько подходов, каждый из которых имеет свои преимущества и сценарии применения.
Давайте начнем с одного из наиболее интуитивно понятных и теперь уже встроенных способов, который был предложен в обсуждении как ручная реализация. Представьте ситуацию: пользователь хочет войти в базу 1С, но вместо ввода привычного пароля, он получает одноразовый код на свой адрес электронной почты, который затем использует для входа. Ранее это требовало бы значительных усилий по программированию, но с версии платформы 8.3.27 этот механизм стал стандартной функциональностью.
Принцип работы этого решения достаточно прост и надежен:
Преимущества и настройка:
Для реализации этого подхода нам потребуется настроить учетные записи пользователей в 1С, указав их электронную почту, и активировать соответствующий вид аутентификации. Платформа самостоятельно позаботится об отправке и проверке кодов.
Теперь давайте рассмотрим более продвинутый и универсальный подход, который позволяет значительно сократить объем "городить кучу" собственной логики, о которой упоминалось в обсуждении. Речь идет об аутентификации с использованием JWT-токенов (JSON Web Token). С версии платформы 8.3.21 в 1С:Предприятие появилась встроенная поддержка этого стандарта (RFC 7519), что открывает широкие возможности для интеграции.
Что такое JWT и как это работает с 1С?
JWT — это компактный, URL-безопасный способ представления информации, которая будет передаваться между сторонами. Эта информация может быть проверена и является достоверной, поскольку она цифрово подписана. В контексте 1С, JWT-токены позволяют платформе выступать как в роли сервера аутентификации (выдавать токены), так и в роли клиента, использующего токены для доступа к внешним HTTP/веб-сервисам, или наоборот — принимать токены от внешних сервисов для аутентификации пользователей 1С.
Основные преимущества использования JWT в 1С:
sub (subject) или адреса электронной почты) с полями пользователей информационной базы 1С. Мы можем определить, по какому атрибуту токена система будет искать соответствующего пользователя в своей базе.HTTP-сервисы в 1С для обработки JWT, определить пользователей, которые будут генерировать токены, и пользователей, которые будут авторизовываться по этим токенам.Пример концептуальной работы с JWT в 1С:
Предположим, у нас есть внешний сервис, который выдает JWT-токен после успешной аутентификации пользователя. Нам необходимо настроить 1С так, чтобы она могла принимать этот токен и по нему определять пользователя. Это делается через механизмы HTTP-сервисов и настройки аутентификации:
// Пример получения JWT-токена из заголовка HTTP-запроса
// Этот код выполняется в модуле HTTP-сервиса 1С
Функция ОбработатьЗапрос(Запрос)
Перем Токен;
Если Запрос.Заголовки.Свойство("Authorization") Тогда
СтрокаАвторизации = Запрос.Заголовки.Authorization;
Если Найти(СтрокаАвторизации, "Bearer ") = 1 Тогда
Токен = Сред(СтрокаАвторизации, СтрДлина("Bearer ") + 1);
// Теперь у нас есть JWT-токен.
// Далее мы можем использовать платформенные механизмы 1С
// для валидации этого токена и определения пользователя.
// Например, через НастройкиАутентификацииПоТокену.
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(Токен) Тогда
// Здесь мы могли бы вызвать платформенную функцию для валидации JWT
// и получения пользователя 1С, соответствующего данным токена.
// Например:
// ПользовательИБ = АутентификацияПоТокену.ПолучитьПользователяПоТокену(Токен);
// Если ПользовательИБ <> Неопределено Тогда
// Ответ = Новый HTTPСервисОтвет(200);
// Ответ.УстановитьТелоИзСтроки("Пользователь " + ПользовательИБ.Имя + " успешно аутентифицирован.");
// Иначе
// Ответ = Новый HTTPСервисОтвет(401);
// Ответ.УстановитьТелоИзСтроки("Неверный токен или пользователь не найден.");
// КонецЕсли;
Иначе
Ответ = Новый HTTPСервисОтвет(401);
Ответ.УстановитьТелоИзСтроки("Токен авторизации не предоставлен.");
КонецЕсли;
Возврат Ответ;
КонецФункции
Платформа 1С возьмет на себя большинство задач по проверке подписи токена, срока его действия и сопоставлению данных с пользователями 1С, если мы правильно настроим соответствующие параметры в конфигурации.
Наконец, давайте разберем, как мы можем "подружить" 1С с такими сервисами, как Mail.ru, используя стандартные протоколы OAuth 2.0 и OpenID Connect. В обсуждении на форуме высказывались сомнения относительно такой возможности, но с развитием платформы это стало вполне реализуемо.
OAuth 2.0 для почтовых ящиков:
Начиная с версии 8.3.19, платформа 1С поддерживает протокол OAuth 2.0 для доступа к почтовым ящикам. Это означает, что 1С может безопасно взаимодействовать с почтовыми сервисами, такими как Mail.ru и Yandex, которые используют OAuth 2.0 для аутентификации. Mail.ru предоставляет подробную документацию по OAuth 2.0 авторизации, описывающую процесс получения кода авторизации, обмена его на access_token и refresh_token. Это ключевой момент, поскольку он позволяет 1С выступать как OAuth-клиент.
Как это работает в контексте аутентификации пользователей 1С?
Хотя OAuth 2.0 сам по себе предназначен для авторизации доступа к ресурсам (например, к почте пользователя), а не для аутентификации пользователя в 1С, мы можем построить на его основе механизм аутентификации. Общая схема будет выглядеть так:
access_token и refresh_token, взаимодействуя напрямую с сервером Mail.ru.access_token, 1С может запросить у Mail.ru информацию о пользователе (например, его email).Для реализации этого нам потребуются HTTP-сервисы и HTTP-запросы в 1С. Мы будем использовать объекты HTTPЗапрос и HTTPСоединение для взаимодействия с API Mail.ru.
Пример получения токена (концептуально):
// Этот код выполняется на стороне 1С, после получения кода авторизации от Mail.ru
// Предполагается, что у нас есть ClientID и ClientSecret, зарегистрированные в Mail.ru
Функция ПолучитьТокенДоступа(КодАвторизации)
АдресСервера = "https://oauth.mail.ru";
Ресурс = "/token";
Соединение = Новый HTTPСоединение(АдресСервера);
Запрос = Новый HTTPЗапрос(Ресурс);
Запрос.УстановитьЗаголовок("Content-Type", "application/x-www-form-urlencoded");
Параметры = Новый Соответствие();
Параметры.Вставить("client_id", "ВАШ_CLIENT_ID");
Параметры.Вставить("client_secret", "ВАШ_CLIENT_SECRET");
Параметры.Вставить("grant_type", "authorization_code");
Параметры.Вставить("code", КодАвторизации);
Параметры.Вставить("redirect_uri", "ВАШ_REDIRECT_URI_В_1С");
ТелоЗапроса = "";
Для Каждого Параметр Из Параметры Цикл
Если Не ПустаяСтрока(ТелоЗапроса) Тогда
ТелоЗапроса = ТелоЗапроса + "&";
КонецЕсли;
ТелоЗапроса = ТелоЗапроса + Параметр.Ключ + "=" + WebСервисы.URLEncode(Параметр.Значение);
КонецЦикла;
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
Попытка
Ответ = Соединение.Отправить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ДанныеОтвета = JSON.Прочитать(Ответ.ПолучитьТелоКакСтроку());
// Здесь ДанныеОтвета будет содержать access_token, refresh_token и другие параметры
Возврат ДанныеОтвета;
Иначе
Сообщить("Ошибка получения токена: " + Ответ.КодСостояния + " - " + Ответ.ПолучитьТелоКакСтроку());
Возврат Неопределено;
КонецЕсли;
Исключение
Сообщить("Ошибка HTTP-запроса: " + ОписаниеОшибки());
Возврат Неопределено;
КонецИсключения;
КонецФункции
OpenID Connect:
OpenID Connect — это протокол аутентификации, построенный на базе OAuth 2.0. Он предоставляет дополнительную информацию о пользователе (имя, email) в виде JWT-токенов (ID Token). Хотя на форуме выражались сомнения в возможности "подружить" Mail.ru с OpenID Connect напрямую, наличие у Mail.ru поддержки OAuth 2.0 делает такую интеграцию потенциально реализуемой через разработку соответствующего клиентского кода в 1С для работы с API Mail.ru. Если Mail.ru предоставляет конечные точки OpenID Connect, то интеграция будет еще проще, поскольку 1С уже поддерживает этот стандарт.
В этом случае, после получения ID Token, мы можем его валидировать (как обычный JWT-токен) и извлечь информацию о пользователе для его аутентификации в 1С.
Независимо от выбранного подхода, при интеграции 1С с внешними системами аутентификации всегда важно соблюдать следующие правила:
HTTPS для обмена данными между 1С и внешними сервисами, чтобы обеспечить конфиденциальность и целостность передаваемой информации.Client ID, Client Secret и другие чувствительные данные должны храниться в 1С максимально безопасно, например, в защищенных хранилищах или параметрах, доступных только администраторам.Как мы видим, если раньше аутентификация через Mail.ru или подобные сервисы требовала значительных усилий и разработки "кучи всего", то с развитием платформы 1С:Предприятие появились более стандартизированные и встроенные механизмы (аутентификация по e-mail, JWT), а также возможности для реализации кастомных решений на базе OAuth 2.0 и OpenID Connect. Эти нововведения делают такую интеграцию гораздо более доступной и менее трудоемкой для разработчиков 1С.
← К списку