Как исправить ошибку 401 при HTTP-соединении 1С через IIS с Windows-аутентификацией?

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

При переходе с веб-сервера Apache на IIS (Internet Information Services) разработчики часто сталкиваются с проблемой, когда привычный код 1С для работы с HTTP-сервисами начинает возвращать ошибку 401 (Unauthorized). Ситуация осложняется тем, что логин и пароль могут быть абсолютно верными, но сервер упорно отказывает в доступе. В этой статье мы подробно разберем, почему это происходит, проанализируем настройки IIS и научимся правильно конфигурировать объект HTTPСоединение для работы в доменной среде.

Анализ кода и параметра использования ОС-аутентификации

Рассмотрим стандартный пример создания соединения, который часто приводит к ошибке при неправильном понимании параметров конструктора:


ХТТПСоединение = Новый HTTPСоединение(ВебСервер,, Пользователь, Пароль, , , , Истина);

ХТТПЗапрос = Новый HTTPЗапрос(ИмяБазы);
ХТТПЗапрос.УстановитьТелоИзДвоичныхДанных(ДДДляПередачи);

ХТТПОтвет = ХТТПСоединение.ОтправитьДляОбработки(ХТТПЗапрос);

Разберем по шагам ключевой момент: восьмой параметр конструктора ИспользоватьОСАутентификацию. В приведенном коде он установлен в значение Истина. Это критически важный нюанс:

  1. Если этот параметр равен Истина, платформа 1С игнорирует явно переданные значения в переменных Пользователь и Пароль. Вместо них используются данные учетной записи, под которой запущен текущий сеанс 1С (если это клиентское приложение) или служба сервера 1С (если код выполняется в фоновом задании).
  2. Если нам необходимо передать конкретные логин и пароль доменного пользователя, отличного от текущего, этот параметр обязательно должен быть установлен в значение Ложь.

Важное правило: Windows-аутентификация в IIS и явная передача логина/пароля в коде 1С — это зачастую взаимоисключающие подходы. Либо мы доверяем текущему пользователю ОС, либо передаем данные вручную, отключая флаг автоматической аутентификации.

Настройка провайдеров аутентификации в IIS

Проанализируем настройки самого веб-сервера. Ошибка 401 часто возникает из-за конфликта протоколов аутентификации. В IIS для компонента «Проверка подлинности Windows» существует список провайдеров.

По умолчанию первым в списке стоит Negotiate, который в первую очередь пытается использовать протокол Kerberos. Если в вашей сети не настроены SPN (Service Principal Names), авторизация завершится неудачей. Для решения этой проблемы выполним следующие действия:

  1. Откроем диспетчер служб IIS.
  2. Выберем наш сайт или опубликованную базу.
  3. Перейдем в раздел «Проверка подлинности» (Authentication).
  4. Выберем «Проверка подлинности Windows» и нажмем «Провайдеры» в правой панели.
  5. Попробуем переместить NTLM на самую верхнюю позицию или оставить только его.

Использование NTLM менее требовательно к настройкам доменной инфраструктуры и часто мгновенно решает проблему с кодом 401.

Проблема обратной петли (Loopback Check)

Рассмотрим ситуацию, когда сервер 1С и IIS установлены на одной и той же физической машине. В Windows реализована функция защиты, которая блокирует аутентификацию, если запрос идет «сам на себя» по полному доменному имени (FQDN). Это типичный случай, когда 1С обращается к адресу вида server.domain.com.

Чтобы выяснить причину, попробуем заменить доменное имя в коде на localhost или локальный IP-адрес. Если ошибка исчезла — дело в Loopback Check. Для полноценного исправления (чтобы можно было использовать FQDN) потребуется внести изменения в реестр Windows:

  1. Перейдем по пути HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0.
  2. Создадим мультистроковый параметр BackConnectionHostNames и впишем туда используемые имена хостов.
  3. Или (менее рекомендуемый способ из соображений безопасности) создадим параметр DisableLoopbackCheck (DWORD) со значением 1 в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa.

Формат имени пользователя и права доступа NTFS

Выясним, правильно ли мы указываем данные в конструкторе HTTPСоединение. При использовании IIS формат Логин без указания контекста часто приводит к отказу. Рекомендуем использовать следующие форматы:

Кроме того, проанализируем права доступа на уровне файловой системы. Ошибка 401.3 означает, что аутентификация прошла успешно, но у пользователя нет прав на файлы. Учетная запись, под которой происходит обращение, должна иметь права «Чтение и выполнение» на:

  1. Каталог публикации базы (где лежит файл .default).
  2. Библиотеку расширения 1С (обычно это wsap24.dll в папке bin установленной платформы). Без прав на эту DLL веб-сервер не сможет запустить обработчик 1С.

Дополнительные параметры безопасности IIS

Если проблема сохраняется, стоит обратить внимание на «Расширенную защиту» (Extended Protection). Эта функция защищает от атак типа «человек посередине», но старые версии клиентов 1С или специфические сетевые конфигурации могут с ней конфликтовать. Попробуем перевести этот параметр в состояние Off в дополнительных настройках проверки подлинности Windows.

Также проверим настройку «Проверка подлинности в режиме ядра» (Kernel-mode authentication). В некоторых случаях ее отключение помогает корректно обрабатывать запросы, если пул приложений работает под специфической сервисной учетной записью, а не под стандартной ApplicationPoolIdentity.

Итоговый алгоритм отладки

Подводя итог, если вы получаете 401 ошибку при работе с IIS, пройдите по следующим шагам:

  1. Проверьте флаг ИспользоватьОСАутентификацию. Если передаете пароль явно — ставьте Ложь.
  2. В IIS временно разрешите «Анонимную проверку подлинности». Если ошибка сменится на 200 — значит, проблема точно в настройках прав доменного доступа.
  3. Убедитесь, что логин передается в формате DOMAIN\Login.
  4. Проверьте список провайдеров в IIS и приоритет NTLM.
  5. Проверьте права пользователя на папку bin платформы 1С.

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

← На главную