自定义WebDAV服务器不适用于Windows 7迷你重定向器

时间:2014-05-29 05:45:38

标签: windows-7 webdav digest-authentication

我正在维护一个自定义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 个答案:

答案 0 :(得分:1)

这结果是一个连接问题。根本原因是win7迷你重定向器在先前连接被丢弃时不发送缓存的“授权”头。

Digest的通常握手是这样的:

  1. 客户端启动连接C,发送请求R
  2. 服务器响应401,通过连接C发回,丢弃与否,取决于
  3. 客户端获取401,计算“授权”标题
  4. 如果C不再存在,则启动另一个连接C',并通过C'发送包含标题的另一个请求R',或者如果C仍然存在,则通过C发送R'。
  5. 服务器对请求进行身份验证,如果凭据正确,则返回200.
  6. win7 dav客户端的问题在上面的步骤4.因为我的服务器将在步骤2中丢弃连接C,所以在步骤4中,win 7将不发送R',其中包括“授权头”,它将重新开始创建一个新的连接C',再次发送普通请求R!

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

    有关详细信息,请参阅我的博客: http://dark9t.github.io/blog/2014/06/02/why-digest-authentication-fails-in-windows-7-mini-redirector/