自定义 WebDAV 服务器不适用于 Windows 7 微型重定向器

Posted

技术标签:

【中文标题】自定义 WebDAV 服务器不适用于 Windows 7 微型重定向器【英文标题】:Custom WebDAV server does not work with Windows 7 mini-redirector 【发布时间】:2014-05-29 05:45:38 【问题描述】:

我正在维护一个自定义的 WebDav 服务器,它可以与大多数 WebDav 客户端(如 Cadaver、Mac OSX 等)顺利运行,但不适用于 Windows 迷你重定向器,即 Windows 资源管理器中的网络驱动器。

服务器实现了摘要式身份验证。

症状是:即使我输入了正确的凭据,也总是提示我输入用户名和密码。更奇怪的是,当我使用 Fiddler 时,问题就消失了。

我研究了几种可能性: 1. 持久连接问题,但我的 apache 服务器启用了摘要和 webdav 与 win 7 客户端顺利工作。 2. 默认命名空间问题。 https://issues.apache.org/bugzilla/show_bug.cgi?id=49428,但我的服务器也没有这个问题。

您能给我一些提示吗?谢谢你

【问题讨论】:

【参考方案1】:

原来是连接问题。根本原因是,当先前的连接断开时,win7 迷你重定向器不会发送缓存的“授权”标头。

Digest 通常的握手是这样的:

    客户端启动连接C,发送请求R 服务器响应为 401,通过连接 C 发回,丢弃与否,视情况而定 客户端获取 401,计算“授权”标头 如果 C 不再存在,则启动另一个连接 C',并通过 C' 发送另一个请求 R',包括标头,或者如果 C 仍然存在,则通过 C 发送 R'。 服务器对请求进行身份验证,如果凭据正确则返回 200。

win7 dav客户端的问题在上面的第4步,因为我的服务器会在第2步断开连接C,所以在第4步,win 7不会发送R',其中包含“Authorization header”,它将重新开始创建一个新连接 C',再次发送普通请求 R!

因此,用户会观察到这个奇怪的“我输入了正确的用户名和密码,但它总是再次询问我”错误。

更多详情请参考我的博客: http://dark9t.github.io/blog/2014/06/02/why-digest-authentication-fails-in-windows-7-mini-redirector/

【讨论】:

以上是关于自定义 WebDAV 服务器不适用于 Windows 7 微型重定向器的主要内容,如果未能解决你的问题,请参考以下文章

JAAS 注销不适用于自定义登录模块

Jquery Validation 适用于默认 [Required] 但不适用于自定义类

HTTPS 不适用于 Amazon Cloudfront 中的自定义域

UITapGestureRecognizer 不适用于 UITextField 的自定义子类

CSS 样式表不适用于自定义 QWidget

sizeWithFont:constrainedToSize 不适用于自定义字体