我们有一个在 IIS6 基本身份验证之后托管 Office 文档的网站。
IE 有一个用于基本身份验证的身份验证令牌,它提供该令牌以下载文件。用户单击“打开”,然后 Microsoft Office 协议发现对提供文件的目录执行 HTTP OPTIONS 请求。但是,Office 没有 IE 的身份验证令牌,因此它会再次提示输入凭据。然后点击取消将在 Office 中显示文件。
由于我们不是类似 Sharepoint 的应用程序,并且我们没有响应 OPTIONS 的方式,我想用 OPTIONS 方法回复所有请求(使用“Microsoft Office 协议发现”的用户代理发送") 与空的 200 类似,如 RFC 2616所述:
如果没有包含响应正文,则响应必须包含字段值为“0”的 Content-Length 字段。
我倾向于在基本身份验证发生之前以 200 响应的 ISAPI 过滤器。Windows 身份验证或匿名访问不是选项。有没有我想念的替代品?
在全局范围内拒绝 IIS 中的 OPTIONS 动词的严厉方法是否可行?您可以安装URLScan并将OPTIONS放入[DenyVerbs]配置中。
我认为您可以使用 appcmd.exe 为网站禁用 WebDAV。您能否创建一个单独的网站来保存文档并在其上禁用 WebDAV?这不应该影响在同一台服务器上运行的任何 Sharepoint 站点。
JR
评论有点太长了,所以我会滥用答案。事实上,它不适用于您的问题,我认为这种行为不会给您带来麻烦,但只是为了确保您了解它。
相反,当单击 Office 文档中的 URL 时,Office (2007) 首先尝试确定 URL 的作用。如果由于访问者(即 Office)未获得授权而导致某些 301 重定向到登录页面,则 Office 实际上会忽略原始 URL。相反,它会在默认浏览器(并不总是 IE)中打开 301 URL。
这可能会将人们引导到登录页面,即使他们已经运行并授权了默认浏览器。当单击的 URL 在 301 URL 的某些 GET 参数中仍然可用时,这是一个小麻烦,例如
login?goto=original-url
. 但是,如果原始 URL 存储在某个会话中(Office 保存 cookie,而不是浏览器),那么用户甚至会卡在登录页面上,因为 Web 服务器不知道在额外之后显示哪个页面登录...我只使用 Office 2007 进行了测试,当时它使用以下用户代理对 Apache 服务器的隐藏请求:
所以我假设 Office 2007 实际上使用 IE 本身来执行请求。我还注意到 Office 2007 可以从 IE 访问 cookie。例如:当用户使用 IE 获得授权(使用 cookie;我没有使用基本身份验证进行测试)时,Office 不会收到 301 重定向到登录页面。因此,当 Office 发出有趣的请求时,它会将 cookie 从 IE 传递到服务器。它还可以将任何收到的 cookie 传递回 IE(我还没有测试过)。
(感谢该知识库文章的链接!)
也许,您应该验证您的 iis6 配置。
在网站配置 -> 主目录 -> 配置 -> 映射中是否有到 .doc 扩展名的映射。
另一件事:网站配置->主目录->配置->映射->选项:启用会话状态选项,它是否处于活动状态?
另一件事:您是否在应用程序池中使用了更多“工人”?(不要使用多个) - 应用程序池 -> 属性 -> 性能 -> 网络园最大工人数 -> 将其设置为“1”
有时,如果它有多个工作进程,“auth”可能会“丢失”