Как настроить аутентификацию пользователей 1С через внешний сервис, например Mail.ru?

Программист 1С v8.3 (Управляемые формы)
← К списку

Многие пользователи и администраторы 1С сталкиваются с задачей интеграции системы аутентификации 1С:Предприятие с внешними сервисами. Особенно актуальным становится вопрос, когда необходимо использовать уже существующие учетные записи, например, из почтовых сервисов, таких как Mail.ru, для входа в информационную базу 1С. Ранее это могло казаться сложной задачей, требующей серьезных доработок и "городить кучу" собственной логики. Однако, с развитием платформы 1С:Предприятие, появились новые, более удобные и стандартизированные механизмы.

В этой статье мы подробно рассмотрим, как современная платформа 1С позволяет решить проблему аутентификации с использованием внешних сервисов, включая Mail.ru, используя встроенные возможности и стандартные протоколы. Мы разберем несколько подходов, каждый из которых имеет свои преимущества и сценарии применения.

1. Аутентификация по электронной почте: Встроенный механизм 1С

Давайте начнем с одного из наиболее интуитивно понятных и теперь уже встроенных способов, который был предложен в обсуждении как ручная реализация. Представьте ситуацию: пользователь хочет войти в базу 1С, но вместо ввода привычного пароля, он получает одноразовый код на свой адрес электронной почты, который затем использует для входа. Ранее это требовало бы значительных усилий по программированию, но с версии платформы 8.3.27 этот механизм стал стандартной функциональностью.

Принцип работы этого решения достаточно прост и надежен:

  1. Пользователь пытается войти в информационную базу.
  2. Система 1С определяет, что для данного пользователя настроена аутентификация по электронной почте.
  3. На указанный в учетной записи пользователя адрес электронной почты (например, на Mail.ru) отправляется письмо с уникальным одноразовым кодом.
  4. Пользователь открывает свою почту, находит письмо, копирует код и вводит его в специальную форму в 1С.
  5. Если введенный код совпадает с отправленным, доступ к системе предоставляется. В противном случае, пользователь получает сообщение об ошибке и может попробовать повторить попытку или запросить новый код.

Преимущества и настройка:

Для реализации этого подхода нам потребуется настроить учетные записи пользователей в 1С, указав их электронную почту, и активировать соответствующий вид аутентификации. Платформа самостоятельно позаботится об отправке и проверке кодов.

2. Аутентификация с использованием JWT-токенов

Теперь давайте рассмотрим более продвинутый и универсальный подход, который позволяет значительно сократить объем "городить кучу" собственной логики, о которой упоминалось в обсуждении. Речь идет об аутентификации с использованием JWT-токенов (JSON Web Token). С версии платформы 8.3.21 в 1С:Предприятие появилась встроенная поддержка этого стандарта (RFC 7519), что открывает широкие возможности для интеграции.

Что такое JWT и как это работает с 1С?

JWT — это компактный, URL-безопасный способ представления информации, которая будет передаваться между сторонами. Эта информация может быть проверена и является достоверной, поскольку она цифрово подписана. В контексте 1С, JWT-токены позволяют платформе выступать как в роли сервера аутентификации (выдавать токены), так и в роли клиента, использующего токены для доступа к внешним HTTP/веб-сервисам, или наоборот — принимать токены от внешних сервисов для аутентификации пользователей 1С.

Основные преимущества использования JWT в 1С:

Пример концептуальной работы с 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С, если мы правильно настроим соответствующие параметры в конфигурации.

3. Интеграция с Mail.ru через OAuth 2.0 и OpenID Connect

Наконец, давайте разберем, как мы можем "подружить" 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С, мы можем построить на его основе механизм аутентификации. Общая схема будет выглядеть так:

  1. Пользователь в 1С (через специально разработанную форму) инициирует вход через Mail.ru.
  2. 1С перенаправляет пользователя на страницу авторизации Mail.ru.
  3. Пользователь вводит свои учетные данные Mail.ru и дает разрешение 1С на доступ к определенным данным.
  4. Mail.ru перенаправляет пользователя обратно в 1С, передавая код авторизации.
  5. 1С обменивает этот код авторизации на access_token и refresh_token, взаимодействуя напрямую с сервером Mail.ru.
  6. Используя полученный access_token, 1С может запросить у Mail.ru информацию о пользователе (например, его email).
  7. На основе полученной информации (email) 1С определяет соответствующего пользователя в своей базе данных и предоставляет ему доступ.

Для реализации этого нам потребуются 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С с внешними системами аутентификации всегда важно соблюдать следующие правила:

Как мы видим, если раньше аутентификация через Mail.ru или подобные сервисы требовала значительных усилий и разработки "кучи всего", то с развитием платформы 1С:Предприятие появились более стандартизированные и встроенные механизмы (аутентификация по e-mail, JWT), а также возможности для реализации кастомных решений на базе OAuth 2.0 и OpenID Connect. Эти нововведения делают такую интеграцию гораздо более доступной и менее трудоемкой для разработчиков 1С.

← К списку