Часто в корпоративной среде возникает задача: отправить пользователю письмо с уведомлением о важном событии (например, необходимость согласования документа) и предоставить прямую ссылку на этот объект в 1С. При этом крайне важно обеспечить удобство — чтобы пользователь не вводил логин и пароль повторно, и безопасность — чтобы конфиденциальные данные доступа не передавались в открытом виде в строке адреса.
Разберем подробно несколько проверенных способов решения этой задачи, начиная от современных протоколов аутентификации и заканчивая программной реализацией на стороне платформы 1С.
Проанализируем наиболее современный подход. Начиная с версии платформы 8.3.18, 1С поддерживает протокол OpenID Connect. Это позволяет интегрировать систему с внешними провайдерами идентификации (Identity Providers), такими как Keycloak, ADFS или облачными сервисами (Google, Microsoft Azure AD).
Рассмотрим алгоритм работы этого механизма:
Для реализации этого метода необходимо выполнить настройки в файле публикации 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С.
Если внедрение полноценного SSO (Single Sign-On) кажется избыточным, проанализируем вариант с программным созданием "умных ссылок". Идея заключается в том, чтобы генерировать уникальный идентификатор (GUID) для каждого действия и привязывать его к конкретному пользователю и документу.
Выясним по шагам, как это реализовать:
ВременныеТокеныАутентификации с измерениями Токен (строка или GUID) и ресурсами Пользователь, Объект, СрокДействия.Рассмотрим пример кода для генерации такой ссылки:
Функция СформироватьСсылкуДляПисьма(ВыбранныйДокумент, НужныйПользователь)
НовыйТокен = Строка(Новый УникальныйИдентификатор());
Запись = РегистрыСведений.ВременныеТокеныАутентификации.СоздатьМенеджерЗаписи();
Запись.Токен = НовыйТокен;
Запись.Пользователь = НужныйПользователь;
Запись.Объект = ВыбранныйДокумент;
Запись.ДатаИстечения = ТекущаяДата() + 600; // Токен живет 10 минут
Запись.Записать();
БазовыйURL = "https://server.ru/mybase/hs/auth/goto/";
Возврат БазовыйURL + НовыйТокен;
КонецФункции
Далее, в HTTP-сервисе 1С, в методе GET, мы должны проверить токен. Если он валиден, мы можем использовать механизм ПерезапускСеанса или сформировать ответ, который перенаправит (Redirect) пользователя в веб-клиент под технической учетной записью, которая затем программно сменит пользователя, либо (что правильнее) использовать ExternalConnection для подтверждения сессии.
Посмотрим на ситуацию со стороны системного администрирования. Если пользователи заходят с личных ноутбуков, можно использовать клиентские SSL-сертификаты. Это обеспечит высочайший уровень безопасности.
Разберем процесс настройки:
Преимущество этого метода в том, что при переходе по ссылке из письма веб-сервер сам "узнает" пользователя. Если сертификат на устройстве не установлен, злоумышленник, перехвативший ссылку, даже не увидит окно логина — веб-сервер оборвет соединение на этапе SSL-рукопожатия.
Рассмотрим вопрос использования доменной аутентификации вне офиса. Чтобы Аутентификация ОС работала "из дома", не обязательно вводить ноутбук в домен. Можно использовать службу ADFS (Active Directory Federation Services).
В этом случае при попытке открыть веб-клиент 1С, сервер перенаправит пользователя на страницу авторизации вашей компании (SSO-портал). Пользователь вводит свои привычные доменные логин и пароль один раз за рабочий день, после чего все ссылки из писем в 1С будут открываться мгновенно в течение всей сессии.
Для настройки в default.vrd необходимо убедиться, что параметры winauth настроены корректно:
<authentication>
<winauth/>
</authentication>
Проанализируем альтернативный путь, который вообще исключает использование электронной почты как промежуточного звена. Если ваши пользователи работают с мобильных устройств, наиболее эффективным решением будет Мобильный клиент 1С.
Вместо письма мы отправляем Push-уведомление. При клике на уведомление мобильное приложение 1С открывается автоматически. Поскольку приложение обычно уже авторизовано (сессия сохраняется долго), пользователь сразу попадает в нужный документ. Это исключает риски пересылки ссылок и кражи учетных данных из почтового трафика.
Для программной отправки Push-уведомления используется объект ДоставляемоеУведомление:
Уведомление = Новый ДоставляемоеУведомление;
Уведомление.Текст = "Необходимо согласовать документ!";
Уведомление.Заголовок = "1С:Предприятие";
Уведомление.Данные = "ID_Документа_123";
// Отправка через сервис 1С:Push
PushУведомления.Отправить(Уведомление, ИдентификаторПодписчика);
Подводя итог, можно сказать следующее:
?Usr=Admin&Pwd=123), так как эта информация сохраняется в логах прокси-серверов и истории браузера.Выбор конкретного метода зависит от инфраструктуры вашей компании и требований безопасности. Помните, что удобство пользователя не должно идти вразрез с защитой корпоративных данных.