Мы разрабатываем сервер 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 должен быть запрограммирован на понимание таких параметров.