Как организовать безопасную аутентификацию в веб-клиенте 1С по ссылке из письма?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

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

Способ 1. Использование технологии OpenID Connect (OIDC)

Проанализируем наиболее современный подход. Начиная с версии платформы 8.3.18, 1С поддерживает протокол OpenID Connect. Это позволяет интегрировать систему с внешними провайдерами идентификации (Identity Providers), такими как Keycloak, ADFS или облачными сервисами (Google, Microsoft Azure AD).

Рассмотрим алгоритм работы этого механизма:

  1. Пользователь получает ссылку на документ в письме. Ссылка ведет на веб-клиент.
  2. Веб-клиент обращается к провайдеру идентификации.
  3. Если пользователь уже авторизован в своей корпоративной системе (например, в Windows или почте), провайдер мгновенно подтверждает его личность и выдает токен.
  4. 1С принимает токен и автоматически авторизует пользователя без запроса пароля.

Для реализации этого метода необходимо выполнить настройки в файле публикации default.vrd. Разберем пример фрагмента настроек для интеграции с провайдером:


<openidConnect>
    <issuer name="Keycloak"
            url="https://sso.company.ru/auth/realms/master"
            clientId="1c_base"
            clientSecret="your_secret_key"
            claimName="preferred_username" />
</openidConnect>

Этот способ является наиболее безопасным, так как пароли вообще не циркулируют между почтовым клиентом и сервером 1С.

Способ 2. Реализация системы одноразовых временных токенов

Если внедрение полноценного SSO (Single Sign-On) кажется избыточным, проанализируем вариант с программным созданием "умных ссылок". Идея заключается в том, чтобы генерировать уникальный идентификатор (GUID) для каждого действия и привязывать его к конкретному пользователю и документу.

Выясним по шагам, как это реализовать:

  1. Создадим в конфигурации 1С регистр сведений ВременныеТокеныАутентификации с измерениями Токен (строка или GUID) и ресурсами Пользователь, Объект, СрокДействия.
  2. При отправке письма сформируем ссылку, которая ведет не на сам документ, а на специально созданный HTTP-сервис в 1С.

Рассмотрим пример кода для генерации такой ссылки:


Функция СформироватьСсылкуДляПисьма(ВыбранныйДокумент, НужныйПользователь)
    НовыйТокен = Строка(Новый УникальныйИдентификатор());
    
    Запись = РегистрыСведений.ВременныеТокеныАутентификации.СоздатьМенеджерЗаписи();
    Запись.Токен = НовыйТокен;
    Запись.Пользователь = НужныйПользователь;
    Запись.Объект = ВыбранныйДокумент;
    Запись.ДатаИстечения = ТекущаяДата() + 600; // Токен живет 10 минут
    Запись.Записать();
    
    БазовыйURL = "https://server.ru/mybase/hs/auth/goto/";
    Возврат БазовыйURL + НовыйТокен;
КонецФункции

Далее, в HTTP-сервисе 1С, в методе GET, мы должны проверить токен. Если он валиден, мы можем использовать механизм ПерезапускСеанса или сформировать ответ, который перенаправит (Redirect) пользователя в веб-клиент под технической учетной записью, которая затем программно сменит пользователя, либо (что правильнее) использовать ExternalConnection для подтверждения сессии.

Способ 3. Аутентификация по клиентским сертификатам (PKI)

Посмотрим на ситуацию со стороны системного администрирования. Если пользователи заходят с личных ноутбуков, можно использовать клиентские SSL-сертификаты. Это обеспечит высочайший уровень безопасности.

Разберем процесс настройки:

  1. На веб-сервере (IIS или Apache) включается требование клиентских сертификатов (Client Certificates - Require).
  2. Каждому пользователю выпускается и устанавливается на компьютер персональный сертификат.
  3. В базе 1С настраивается Аутентификация ОС, где имя пользователя сопоставляется с данными сертификата (поле Subject).

Преимущество этого метода в том, что при переходе по ссылке из письма веб-сервер сам "узнает" пользователя. Если сертификат на устройстве не установлен, злоумышленник, перехвативший ссылку, даже не увидит окно логина — веб-сервер оборвет соединение на этапе SSL-рукопожатия.

Способ 4. Доменная аутентификация (Kerberos/ADFS) для удаленных рабочих мест

Рассмотрим вопрос использования доменной аутентификации вне офиса. Чтобы Аутентификация ОС работала "из дома", не обязательно вводить ноутбук в домен. Можно использовать службу ADFS (Active Directory Federation Services).

В этом случае при попытке открыть веб-клиент 1С, сервер перенаправит пользователя на страницу авторизации вашей компании (SSO-портал). Пользователь вводит свои привычные доменные логин и пароль один раз за рабочий день, после чего все ссылки из писем в 1С будут открываться мгновенно в течение всей сессии.

Для настройки в default.vrd необходимо убедиться, что параметры winauth настроены корректно:


<authentication>
    <winauth/>
</authentication>

Способ 5. Использование мобильного клиента и Push-уведомлений

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

Вместо письма мы отправляем Push-уведомление. При клике на уведомление мобильное приложение 1С открывается автоматически. Поскольку приложение обычно уже авторизовано (сессия сохраняется долго), пользователь сразу попадает в нужный документ. Это исключает риски пересылки ссылок и кражи учетных данных из почтового трафика.

Для программной отправки Push-уведомления используется объект ДоставляемоеУведомление:


Уведомление = Новый ДоставляемоеУведомление;
Уведомление.Текст = "Необходимо согласовать документ!";
Уведомление.Заголовок = "1С:Предприятие";
Уведомление.Данные = "ID_Документа_123";

// Отправка через сервис 1С:Push
PushУведомления.Отправить(Уведомление, ИдентификаторПодписчика);

Итоги и рекомендации

Подводя итог, можно сказать следующее:

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

← На главную