如何避免Windows(Vista)做“双”webdav请求

时间:2009-03-20 15:07:36

标签: windows webdav

我们对WebDAV Access使用DIGEST身份验证。我们观察到Windows客户端每次发送两次请求。第一个请求没有Authorization标头(并获得401响应),第二个请求具有Authorization标头(并且通常得到正确的响应)。

虽然用户可能看不到这一点,但它使得整个Webdav访问速度变得慢一些。

有可能以某种方式避免这种行为吗?也许一些特殊的回应会说服Windows不要这样做?当我们使用BASIC而不是DIGEST时,它工作正常(仅使用Authorization标头执行单个请求)

4 个答案:

答案 0 :(得分:3)

我相信您描述的方法(称为“质询/响应”方法)是WebDAV的预期行为。至少它是根据the specs。没有auth头的第一个请求是必要的; WebDAV的响应包含nonce来验证下一个请求,有助于避免例如重放攻击。

所以,底线:你不能,不应该试图避免这种行为。

对于正在执行此操作的非Windows客户端...在初始质询/响应调用之后,他们可能会以某种方式缓存和重用nonce。这在规范中肯定是允许的 - 即使nonce应该是一次性项目,规范允许WebDAV服务器在多个请求中使nonce短命。您的非Windows客户端可能能够识别您的WebDAV服务器并采取相应的行动,但Windows客户端却不能。

在这种情况下,我不知道除了要求用户找到缓存nonce的客户端之外的其他工作。不幸的是,我无法帮你找到这样的客户。我的Google-fu在这方面失败了。

答案 1 :(得分:1)

您还可以研究一种名为“预身份验证”的内容。预身份验证是使用身份验证标头发送第一个请求,而不是发送初始匿名请求。

虽然应用程序和Web服务是理想的,因为您通常事先知道是否需要身份验证,但您通常不知道网站是否需要事先进行身份验证。

WebFolders / WebDAV是一个特例,但同样,你不确定。

预身份验证的问题在于您可能会将信息发送到您不一定信任的站点。基本身份验证会泄露王国的密钥(用户/密码以纯文本格式),但是协商,NTLM和摘要都不是那么糟糕。

您可以查看。{3}}在.Net中对网络服务进行预先验证,我已成功使用该服务消除了最初的401.

答案 2 :(得分:0)

如果您正在使用Windows WebFolder客户端,可能需要查看this issues list上托管的greenbytes WebDav site。如果您发现列表中未包含任何Vista特定详细信息,请向编辑发送一份说明。

答案 3 :(得分:0)

如果你不介意允许安全性较低的设置,那就是允许匿名目录层次结构列出PROPFIND请求并验证其他所有内容;见http://blog.klinsight.com/2013/02/windows-webdav-double-authentication.html - (我为我的作品撰写了这篇文章)。节省时间非常重要。