При переходе с веб-сервера Apache на IIS (Internet Information Services) разработчики часто сталкиваются с проблемой, когда привычный код 1С для работы с HTTP-сервисами начинает возвращать ошибку 401 (Unauthorized). Ситуация осложняется тем, что логин и пароль могут быть абсолютно верными, но сервер упорно отказывает в доступе. В этой статье мы подробно разберем, почему это происходит, проанализируем настройки IIS и научимся правильно конфигурировать объект HTTPСоединение для работы в доменной среде.
Рассмотрим стандартный пример создания соединения, который часто приводит к ошибке при неправильном понимании параметров конструктора:
ХТТПСоединение = Новый HTTPСоединение(ВебСервер,, Пользователь, Пароль, , , , Истина);
ХТТПЗапрос = Новый HTTPЗапрос(ИмяБазы);
ХТТПЗапрос.УстановитьТелоИзДвоичныхДанных(ДДДляПередачи);
ХТТПОтвет = ХТТПСоединение.ОтправитьДляОбработки(ХТТПЗапрос);
Разберем по шагам ключевой момент: восьмой параметр конструктора ИспользоватьОСАутентификацию. В приведенном коде он установлен в значение Истина. Это критически важный нюанс:
Истина, платформа 1С игнорирует явно переданные значения в переменных Пользователь и Пароль. Вместо них используются данные учетной записи, под которой запущен текущий сеанс 1С (если это клиентское приложение) или служба сервера 1С (если код выполняется в фоновом задании).Ложь.Важное правило: Windows-аутентификация в IIS и явная передача логина/пароля в коде 1С — это зачастую взаимоисключающие подходы. Либо мы доверяем текущему пользователю ОС, либо передаем данные вручную, отключая флаг автоматической аутентификации.
Проанализируем настройки самого веб-сервера. Ошибка 401 часто возникает из-за конфликта протоколов аутентификации. В IIS для компонента «Проверка подлинности Windows» существует список провайдеров.
По умолчанию первым в списке стоит Negotiate, который в первую очередь пытается использовать протокол Kerberos. Если в вашей сети не настроены SPN (Service Principal Names), авторизация завершится неудачей. Для решения этой проблемы выполним следующие действия:
NTLM на самую верхнюю позицию или оставить только его.Использование NTLM менее требовательно к настройкам доменной инфраструктуры и часто мгновенно решает проблему с кодом 401.
Рассмотрим ситуацию, когда сервер 1С и IIS установлены на одной и той же физической машине. В Windows реализована функция защиты, которая блокирует аутентификацию, если запрос идет «сам на себя» по полному доменному имени (FQDN). Это типичный случай, когда 1С обращается к адресу вида server.domain.com.
Чтобы выяснить причину, попробуем заменить доменное имя в коде на localhost или локальный IP-адрес. Если ошибка исчезла — дело в Loopback Check. Для полноценного исправления (чтобы можно было использовать FQDN) потребуется внести изменения в реестр Windows:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0.BackConnectionHostNames и впишем туда используемые имена хостов.DisableLoopbackCheck (DWORD) со значением 1 в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa.Выясним, правильно ли мы указываем данные в конструкторе HTTPСоединение. При использовании IIS формат Логин без указания контекста часто приводит к отказу. Рекомендуем использовать следующие форматы:
Domain\User или User@domain.com.ComputerName\User.Кроме того, проанализируем права доступа на уровне файловой системы. Ошибка 401.3 означает, что аутентификация прошла успешно, но у пользователя нет прав на файлы. Учетная запись, под которой происходит обращение, должна иметь права «Чтение и выполнение» на:
.default).wsap24.dll в папке bin установленной платформы). Без прав на эту DLL веб-сервер не сможет запустить обработчик 1С.Если проблема сохраняется, стоит обратить внимание на «Расширенную защиту» (Extended Protection). Эта функция защищает от атак типа «человек посередине», но старые версии клиентов 1С или специфические сетевые конфигурации могут с ней конфликтовать. Попробуем перевести этот параметр в состояние Off в дополнительных настройках проверки подлинности Windows.
Также проверим настройку «Проверка подлинности в режиме ядра» (Kernel-mode authentication). В некоторых случаях ее отключение помогает корректно обрабатывать запросы, если пул приложений работает под специфической сервисной учетной записью, а не под стандартной ApplicationPoolIdentity.
Подводя итог, если вы получаете 401 ошибку при работе с IIS, пройдите по следующим шагам:
ИспользоватьОСАутентификацию. Если передаете пароль явно — ставьте Ложь.DOMAIN\Login.NTLM.bin платформы 1С.Следуя этим шагам, мы сможем настроить стабильное и безопасное соединение между базами 1С в корпоративной сети.