Настройка сквозной авторизации (Single Sign-On, или SSO) — это отличный способ повысить удобство работы пользователей с информационными базами 1С:Предприятия. При успешной настройке пользователям больше не приходится вводить логин и пароль при запуске тонкого или веб-клиента: система автоматически распознает их доменные учетные данные. Однако при использовании популярного веб-сервера Apache 2.4 технические специалисты часто сталкиваются со сложностями, ограничениями платформы и устаревшими инструкциями в сети.
В этой статье мы подробно разберем, как устроена аутентификация операционной системы в связке с Apache 2.4, почему стандартный флаг публикации в 1С бывает недоступен, и как по шагам настроить сквозную авторизацию как в среде Windows, так и на операционных системах семейства Linux.
Для начала проанализируем важный нюанс, о котором часто забывают начинающие администраторы. Если мы откроем диалог публикации информационной базы на веб-сервере в конфигураторе 1С или утилите администрирования, то в самом низу окна мы можем увидеть флаг «Использовать аутентификацию операционной системы».
Обратим внимание на критическое ограничение платформы: этот флаг доступен для интерактивной настройки только при использовании веб-сервера IIS (Internet Information Services). Как только мы переключаем тип веб-сервера на Apache, эта опция пропадает из интерфейса платформы. Это связано с тем, что IIS изначально глубоко интегрирован в инфраструктуру безопасности Windows и Active Directory, тогда как для Apache требуется ручная конфигурация внешних модулей авторизации.
Тем не менее, реализовать сквозную аутентификацию через Apache 2.4 вполне реально. Давайте подробно рассмотрим рабочие сценарии для Windows и Linux.
Если ваш веб-сервер Apache 2.4 развернут на ОС Windows, стандартный доменный механизм Kerberos/NTLM можно реализовать с помощью сторонних модулей. Ранее для старых версий веб-сервера (Apache 2.2) использовался модуль mod_auth_sppi, который на сегодняшний день полностью устарел и не поддерживается версией 2.4.
Для современных сборок Apache 2.4 под Windows мы будем использовать его актуальный аналог — модуль mod_authnz_sspi. Разберем процесс настройки по шагам:
mod_authnz_sspi.so), соответствующую разрядности установленного веб-сервера Apache 2.4 (x86 или x64), и поместить её в каталог modules вашего веб-сервера.httpd.conf и добавим строку для загрузки модуля:
LoadModule authnz_sspi_module modules/mod_authnz_sspi.so
httpd.conf (или во внешнем файле конфигурации публикации) блок, описывающий доступ к нашей публикации 1С, и приведем его к следующему виду:
<Directory "C:/inetpub/wwwroot/my_database">
DirectoryIndex default.vrd
AllowOverride All
Options None
Require all granted
# Настройка сквозной авторизации SSPI
AuthType SSPI
AuthName "1C Enterprise SSO"
SSPIAuth On
SSPIAuthoritative On
SSPIOmitDomain On
SSPIUsernameCase lower
Require valid-user
</Directory>
AuthType SSPI — указывает веб-серверу использовать интерфейс SSPI для авторизации доменных пользователей.SSPIOmitDomain On — заставляет сервер передавать в 1С только имя пользователя без доменного префикса (например, "ivanov" вместо "DOMAIN\ivanov"). Это крайне важно для сопоставления с именами пользователей в списке пользователей 1С.SSPIUsernameCase lower — приводит имя пользователя к нижнему регистру, что исключает ошибки из-за разницы в написании.В рамках импортозамещения и перехода на свободное ПО связка Linux + Apache 2.4 + Kerberos стала стандартом де-факто для крупных корпоративных внедрений 1С. В современных дистрибутивах (таких как Astra Linux, РЕД ОС, Ubuntu) устаревший модуль mod_auth_kerb больше не используется, так как он исключен из официальных репозиториев. Вместо него мы применим современный и безопасный модуль mod_auth_gssapi.
Рассмотрим пошаговый алгоритм настройки бесшовной авторизации на Linux-сервере:
usr-apache-sso. В свойствах этой записи необходимо установить флаг «Срок действия пароля не ограничен».ktpass свяжем имя веб-службы (SPN) с созданным пользователем и запишем секретные ключи в keytab-файл:
ktpass -princ HTTP/web-1c.domain.local@DOMAIN.LOCAL -mapuser usr-apache-sso@DOMAIN.LOCAL -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass MyStrongPassword123 -out c:\temp\apache.keytab
web-1c.domain.local должно быть реальным FQDN-именем вашего Linux-сервера, а имя домена DOMAIN.LOCAL обязательно указывается заглавными буквами!
apache.keytab на Linux-сервер в каталог /etc/apache2/ (или /etc/httpd/). Обязательно ограничим права доступа к этому файлу, чтобы его мог читать только процесс веб-сервера Apache:
chown www-data:www-data /etc/apache2/apache.keytab
chmod 400 /etc/apache2/apache.keytab
/etc/krb5.conf, указав параметры нашего домена:
[libdefaults]
default_realm = DOMAIN.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = true
[realms]
DOMAIN.LOCAL = {
kdc = dc1.domain.local
admin_server = dc1.domain.local
}
[domain_realm]
.domain.local = DOMAIN.LOCAL
domain.local = DOMAIN.LOCAL
apt-get install libapache2-mod-auth-gssapi
a2enmod auth_gssapi
<Location "/my_database">
AuthType GSSAPI
AuthName "1C Enterprise GSSAPI Auth"
GssapiCredStore keytab:/etc/apache2/apache.keytab
GssapiLocalName On
Require valid-user
</Location>
GssapiLocalName On здесь выполняет ту же роль, что и в Windows: он отсекает доменную часть имени, оставляя платформе 1С только чистый логин пользователя.
Поскольку мы настраиваем аутентификацию в Apache в обход графического интерфейса конфигуратора 1С, нам необходимо вручную указать платформе, что веб-сервер берет на себя авторизацию пользователей. Для этого отредактируем файл публикации default.vrd, который находится в физическом каталоге нашей публикации на диске.
Откроем default.vrd в текстовом редакторе и убедимся, что внутри корневого элемента <point> присутствует корректно настроенный элемент <authentication>:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/my_database"
ib="Srvr="server-1c";Ref="my_database";">
<ws enable="true"/>
<authentication>
<winAnonymToSystemAnonym>false</winAnonymToSystemAnonym>
<useOsAuthentication>true</useOsAuthentication>
</authentication>
</point>
Параметр useOsAuthentication="true" сообщает платформе 1С, что имя авторизованного веб-сервером пользователя нужно сопоставлять со списком пользователей информационной базы, у которых настроена аутентификация операционной системы.
Выясним причину возможных сбоев при запуске веб-клиента. В истории развития платформы 1С:Предприятие существовала критическая зарегистрированная ошибка под кодом 60008315. Суть проблемы заключалась в том, что при использовании веб-клиента на веб-сервере Apache под Linux сквозная аутентификация полностью блокировалась из-за некорректной обработки сервером заголовков GSSAPI-авторизации.
Разработчики исправили этот баг только в относительно свежих релизах. Чтобы избежать бесконечных циклических запросов авторизации в браузере, используйте версию платформы 1С:Предприятие не ниже 8.3.22.2208 (или аналогичные исправленные релизы веток 8.3.23 и старше).
По умолчанию современные браузеры (Google Chrome, Mozilla Firefox, Microsoft Edge) из соображений безопасности не передают Kerberos-токены или учетные данные Windows сторонним сайтам. Чтобы сквозная авторизация заработала в веб-клиенте, адрес вашего веб-сервера 1С необходимо добавить в список доверенных узлов.
Проанализируем, как это сделать для различных браузеров:
about:config, найдем параметр network.negotiate-auth.trusted-uris и укажем в нем адрес нашего веб-сервера, например: http://web-1c.domain.local.Выполнив эти шаги, мы получим стабильно работающую систему сквозной доменной авторизации в 1С через современный веб-сервер Apache 2.4, которая значительно упростит повседневную работу пользователей.