Настройка сквозной аутентификации (SSO) в среде Linux для платформы 1С:Предприятие — это комплексная задача, требующая ювелирной точности в конфигурации веб-сервера, операционной системы и самой базы данных. Часто системные администраторы сталкиваются с ситуацией, когда тонкий клиент 1С успешно авторизует пользователя по доменной учетной записи, но при попытке входа через браузер или по протоколу HTTP возникает ошибка: "Идентификация пользователя не выполнена. Неправильное имя или пароль пользователя". Проанализируем причины этой проблемы и разберем по шагам, как заставить технологию Kerberos работать корректно.
Прежде всего, нам необходимо понять, что происходит на стороне сервера в момент попытки входа. Ошибка в логах rphost типа Exception=a01f465c-ed70-442e-ada5-847668d7a41c с описанием Неправильное имя или пароль пользователя при обращении к ресурсу /e1cib/login часто вводит в заблуждение. Она не всегда означает, что пароль действительно неверный. В контексте веб-публикации это обычно сигнализирует о том, что веб-сервер (в нашем случае Apache) не смог передать данные об авторизованном пользователе приложению 1С.
Рассмотрим ситуацию: при использовании Apache стандартная публикация, которую создает 1С, содержит директиву Require all granted. Это означает, что веб-сервер пускает любого пользователя, не пытаясь его предварительно авторизовать средствами операционной системы. В результате 1С получает "анонимный" запрос и пытается выполнить стандартную аутентификацию, которая завершается неудачей, так как данные пользователя AD не были переданы в заголовках HTTP.
Выясним основную причину: Apache не передаст данные о пользователе в 1С, если сам его не авторизует. Для этого нам нужно изменить конфигурационный файл публикации (обычно это .conf файл в директории настроек Apache или блок в httpd.conf). Разберем пример правильной настройки, которая позволяет связать Apache и Active Directory через протокол Kerberos.
Проанализируем структуру конфигурации. Нам необходимо закомментировать стандартную строку доступа и добавить блок настроек Kerberos:
# Пример настройки публикации 1С с поддержкой Kerberos
Alias "/1c_base" "/var/www/1c_base/"
<Directory "/var/www/1c_base/">
AllowOverride All
Options None
# Обязательно комментируем или удаляем стандартную строку:
# Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "/var/www/1c_base/default.vrd"
# Включаем аутентификацию Kerberos
AuthType Kerberos
AuthName "1C Kerberos Login"
KrbAuthRealms YOURDOMAIN.COM
KrbSaveCredentials On
KrbMethodNegotiate On
KrbMethodK5Passwd on
# Путь к keytab-файлу, который должен быть доступен пользователю, от которого запущен Apache
Krb5Keytab /opt/1cv8/x86_64/usr1cv8.keytab
# Имя сервиса (SPN), зарегистрированное в AD
KrbServiceName HTTP/1c-server.yourdomain.com@YOURDOMAIN.COM
# Требуем только валидных пользователей домена
Require valid-user
KrbVerifyKDC Off
</Directory>
Важно помнить, что файл .keytab должен иметь права на чтение для пользователя apache (или www-data в зависимости от дистрибутива). Если Apache не сможет прочитать ключ, аутентификация предсказуемо провалится.
Другой важный момент, который мы должны рассмотреть — это чувствительность Linux-систем и Apache к регистру символов. В отличие от IIS на Windows, Apache крайне строго относится к тому, как передается имя пользователя. Существует вероятность, что система получает USER@DOMAIN.COM, а в 1С в списке пользователей указано user@domain.com.
Проанализируем настройки пользователя в конфигураторе 1С. Для корректной работы сквозной аутентификации рекомендуется:
DOMAIN\UserName или userName@domain.com.klist на сервере или что настроено в AD.Разберем ситуацию глубже. Kerberos не будет работать, если нарушена логика разрешения имен. Проверим следующие пункты:
DNS и PTR-записи. Сервер, на котором установлен Apache, должен иметь корректную прямую и обратную запись в DNS. Если IP сервера не разрешается в его FQDN (полное доменное имя), Kerberos-билет может быть признан недействительным.
Service Principal Name (SPN). Для учетной записи в Active Directory, от имени которой работает служба (или к которой привязан keytab), должен быть зарегистрирован SPN. Проверим его наличие в AD командой:
setspn -L service_account_name
Должны присутствовать записи вида HTTP/имя_сервера и HTTP/имя_сервера.домен. Если их нет, создадим их, иначе браузер не поймет, что к этому серверу можно обращаться по протоколу Kerberos.
Даже если сервер настроен идеально, браузер может блокировать передачу учетных данных из соображений безопасности. Рассмотрим, что нужно сделать на компьютере пользователя:
В Google Chrome или Microsoft Edge необходимо добавить адрес сервера 1С в список доверенных сайтов или настроить политику AuthServerWhitelist. Без этого браузер не ответит на запрос сервера WWW-Authenticate: Negotiate.
В Mozilla Firefox нужно перейти в about:config, найти параметр network.negotiate-auth.trusted-uris и вписать туда домен вашей организации.
Если настройка Kerberos на Apache кажется избыточно сложной или нестабильной, стоит обратить внимание на рекомендации компании 1С, озвученные начиная с платформы 8.3.19. Разберем альтернативный вариант — использование OpenID Connect. Это современный протокол, который позволяет реализовать "Единый вход" (SSO) гораздо проще. В этом случае 1С выступает в роли поставщика или потребителя личности, а авторизация происходит через специальный центр идентификации. Это избавляет от необходимости возиться с keytab-файлами и сложными настройками модулей Apache, обеспечивая при этом более высокий уровень безопасности и совместимости с мобильными устройствами и доступом через интернет.
Подводя итог, можно сказать: основная причина неудачи при настройке AD-входа в браузере — это отсутствие активной фазы аутентификации на уровне самого веб-сервера. Настроив mod_auth_kerberos (или более современный mod_auth_gssapi) и обеспечив прозрачную передачу имени пользователя в 1С, вы добьетесь стабильной работы SSO в вашей организации.