«Подключить сетевой диск» в проводнике Windows генерирует несанкционированный HTTP-запрос OPTIONS

«Подключить сетевой диск» в проводнике Windows генерирует несанкционированный HTTP-запрос OPTIONS

Мы разрабатываем сервер WebDAV на Java, который мы хотели бы обслуживать клиент Windows File Explorer. Я могу запустить следующую curlкоманду, которая даст хороший ответ:

>curl -i -X OPTIONS http://localhost:8080/storage-explorer/rest/dav -u joe:JoeSchmo1!

Если я попытаюсь «Подключить сетевой диск» с помощью Проводника, указав того же пользователя и пароль, что и в curlкоманде, я получу ответ «не авторизован».

введите описание изображения здесь

Мы разрабатываем сервер WebDAV на Java, который мы хотели бы обслуживать клиент Windows File Explorer. Я могу запустить следующую команду curl, которая даст хороший ответ:

curl -i -X ​​ОПЦИИ http://localhost:8080/storage-explorer/rest/dav -u joe:JoeSchmo1! Если я попытаюсь "Подключить сетевой диск" с помощью Проводника, указав того же пользователя и пароль, что и в команде curl, я получу ответ "не авторизовано".

Я проверил запросы и ответы с помощью WireShark. Для curlя вижу:

OPTIONS /storage-explorer/rest/dav HTTP/1.1
Host: localhost:8080
Authorization: Basic am9lOkpvZVNjaG1vMSE=
User-Agent: curl/8.4.0
Accept: */*

HTTP/1.1 200 OK
Expires: 0
Cache-Control: no-cache, no-store, must-revalidate
Server: milton.io-3.0.0.1
Pragma: no-cache
DAV: 1, 2
Accept-Ranges: bytes
Date: Wed, 27 Mar 2024 17:46:05 GMT
Allow: HEAD, PROPFIND, REPORT, OPTIONS, HEAD, PROPPATCH
Connection: keep-alive
Content-Length: 0
MS-Author-Via: DAV

Для File Explorer я вижу:

OPTIONS /storage-explorer/rest/dav HTTP/1.1
Connection: Keep-Alive
User-Agent: Microsoft-WebDAV-MiniRedir/10.0.19045
translate: f
Host: localhost:8080

HTTP/1.1 401 Unauthorized
Expires: 0
Connection: keep-alive
WWW-Authenticate: Basic realm="ApplicationRealm"
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Content-Type: text/html;charset=UTF-8
Content-Length: 71
Date: Wed, 27 Mar 2024 18:06:34 GMT

<html><head><title>Error</title></head><body>Unauthorized</body></html>

Еще одна странность заключается в том, что я вижу активность в журнале нашего веб-приложения для curlзапроса, но не для запроса Проводника.

В чем заключается важное различие между двумя запросами OPTIONS, которое вызывает разные ответы? Что я могу сделать из File Explorer, чтобы он сгенерировал приемлемый запрос, например, эквивалентный curl's?

Основываясь на этомстатья, я раньше regeditизменял HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevelнастройки, чтобы разрешить http, но это ничего не изменило.

Я открыт для любых предложений по отладке.

решение1

Важное отличие заключается в этой части:

Authorization: Basic am9lOkpvZVNjaG1vMSE=

Строка после слова "Basic" — это кодировка base64 вашего имени пользователя и пароля. Ваш сервер WebDAV, очевидно, не разрешает анонимный доступ к этому ресурсу.

Я не знаю, как запрограммированы ваша страница и код сервера, но, очевидно, введенные имя пользователя и пароль не передаются на сервер, как внутри сгенерированного запроса.

Альтернативой передаче имени пользователя/пароля через Authorization заголовок является передача параметров запроса, добавленных к URL, например http://example.com?u=username,p=password. Другой вариант: .http://username:[email protected]/

Ваш сервер WebDAV должен быть запрограммирован на понимание таких параметров.

Связанный контент