yudenisov (yudenisov) wrote,
yudenisov
yudenisov

Categories:

Issue-2021-01-30

Сегодня занимался программированием веб-приложения, основой которой было приложение WebDAV на Microsoft IIS сервере с базовой аутентификацией. Прошло много времени с того момента, когда я последний раз программировал такие веб-приложения, и я маленько «накосячил». У меня последовательно появлялись ошибки 67, 1920. 1244 веб-клиента и 401 ошибка веб-сервера. Опишу, как я их исправлял.

Ошибка 67 веб-клиента

В документации Microsoft сказано, что эта ошибка возникает, когда неправильно указан URI веб-сервера. Но в моём случае URI был правильный, ошибок в наборе URI не было. Однако я как то сразу обнаружил причину. Дело в том, что эта ошибка возникает при использовании http протокола вместе с базовой аутентификацией. По умолчанию с базовой атентификацией работает протокол https. Поскольку мне не хотелось заморачиваться с сертификатом, в качестве временного решения я создал следующий reg-файл, который разрешает этот протокол:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters]
"AcceptOfficeAndTahoeServers"=dword:00000001
"BasicAuthLevel"=dword:00000002


Ошибка 1920

Эта ошибка происходит, если неверно заданы настройки WebDAV приложения. В принципе, по документации, оно означает, что веб-клиент находит URI документа, но не находит в нём шару. Применительно ко мне был следующий косяк. Я почему-то настроил приложения аутентификации не на корневой каталог, а на вложенные. Вследствие этого у меня начались разные «чудеса», от невозможности включить WebDAV до неприменения правил аутентификации. Решение было следующим, хотя, как оказалось, неполным:

  • внутри сайта я удалил все файлы web.config в корневом и всех вложеных каталогах

  • создал приложение WebDAV в корневом каталоге сервера и настроил для него базовую аутентификацию

После этого исчезла не только ошибка 1920, но и ошибка 1244, которая в веб-клиенте является аналогом ошибки «Access denied». Клиент нормально заработал как с веб-сервера, так и с командной строки (команда net use). Однако я рано радовался. При доступе к приложению при помощи команды curl.exe на некоторых каталогах у меня наблюдалась ошибка веб-сервера 401 «Unauthorized». Job,rf была странная, поскольку на других каталогах всё работало. Танцы с бубном привели к следующей зацепке. Оказывается, часть каталогов соединялось по базовой аутентификации, а часть по аутентификации NTLM Windows. Это было уже что-то. В результате родилось действие.

Исправление ошибки 401 веб-сервера

Исправление этой ошибки оказалось простым. Мне пришлось зайти во вложенные каталоги, где я ранее «накосячил», и проверить тип аутентификации. Оказалось, и это баг IIS, что после удаления файлов web.config данные аутентификации никуда не удалялись! У меня там стояла аутетнтификация Windows NTLM и доступ для конкретного пользователя. После удаления пользователя (аутентификация только для группы) и ручное выставление базовой аутентификации всё заработало!

Выводы

Ещё раз отмечаю, что всякие «полезные» советы исправления аутентификации путем удаления/отключения WebDAV или его переустановки на самом деле вредны. Действительно, приложение IIS WebDAV очень капризное в настройке, тем более нужно следовать в его настройке следующим советам:

1. Устанавливайте приложение в корне сервера. Если Вам потребуются другие обработчики, создайте для них новый сервер на поддомене. Это гораздо проще, чем потом разбирать капризы IIS.

2. Основные настройки WebDAV и аутентификации необходимо проводить в корне приложения, а в подкаталогах менять уже малозначимые параметры (вроде документа по умолчанию или просмотра каталога). Этим Вы избавитесь от множества скрытых ошибок.
Tags: заметки, программирование
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments