3

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

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

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

4

4 回答 4

3

我相信您描述的方法,称为“挑战/响应”方法,是 WebDAV 的预期行为。至少它是根据规格。没有身份验证标头的第一个请求是必要的;来自 WebDAV 的响应包含一个用于验证下一个请求的随机数,有助于抵御例如重放攻击。

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

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

在这种情况下,除了要求用户找到一个缓存 nonce 的客户端之外,我不知道有什么解决方法。不幸的是,我无法帮助您找到这样的客户。我的 Google-fu 在这方面失败了。

于 2009-03-23T15:11:35.923 回答
1

您还可以研究称为“预身份验证”的东西。Preauthentication 发送带有身份验证标头的第一个请求,而不是发送初始匿名请求。

虽然应用程序和 Web 服务非常适合这种情况,因为您通常事先知道是否需要身份验证,但您通常不知道网站是否需要事先进行身份验证。

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

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

您可以在此处查看在 .Net 中为 Web 服务进行预身份验证,我已使用该服务成功消除了最初的 401。

于 2009-03-24T15:11:50.703 回答
0

如果您正在为 Windows WebFolder 客户端苦苦挣扎,您可能希望查看托管在greenbytes WebDav 站点上的这个问题列表。如果您发现列表中未包含任何 Vista 特定细节,请向编辑发送说明。

于 2009-03-26T07:42:03.530 回答
0

如果您不介意允许不太安全的设置,一种解决方法是允许匿名目录层次结构列出 PROPFIND 请求并验证其他所有内容;请参阅http://blog.klinsight.com/2013/02/windows-webdav-double-authentication.html - (我为我的工作写了那篇文章)。节省的时间很重要。

于 2013-02-07T17:59:46.730 回答