Windows 的檔案總管「對應網路磁碟機」產生未經授權的 HTTP OPTIONS 請求

Windows 的檔案總管「對應網路磁碟機」產生未經授權的 HTTP OPTIONS 請求

我們正在用 Java 開發一個 WebDAV 伺服器,我們希望為 Windows 的檔案總管用戶端提供服務。我可以運行以下curl命令,得到良好的回應:

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

如果我嘗試使用檔案總管“映射網路磁碟機”,同時指定與命令中相同的使用者和密碼curl,我會收到“未經授權”的回應。

在此輸入影像描述

我們正在用 Java 開發一個 WebDAV 伺服器,我們希望為 Windows 的檔案總管用戶端提供服務。我可以運行以下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

對於文件資源管理器,我看到:

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>

另一個奇怪的是,我可以在我們的 web 應用程式日誌中看到該curl請求的活動,但看不到檔案總管請求的活動。

導致不同回應的兩個 OPTIONS 請求之間的重要差異是什麼?我可以從檔案總管中做什麼來讓它產生可接受的請求,例如相當於curl的請求?

基於此文章,我曾經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 伺服器應該被編程為理解這些參數。

相關內容