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 命令,它会给出良好的响应:

curl -i -X OPTIONS 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 服务器应该被编程来理解这些参数。

相关内容