我们有一个网站,通过 IIS6 基本身份验证来托管 Office 文档。
IE 具有用于基本身份验证的身份验证令牌,它出示该令牌来下载文件。用户单击“打开”,然后 Microsoft Office 协议发现对文件提供的目录执行 HTTP OPTIONS 请求。但是,Office 没有 IE 拥有的身份验证令牌,因此它再次提示输入凭证。点击“取消”将会在 Office 中显示该文件。
由于我们不是类似 Sharepoint 的应用程序,并且我们没有办法响应 OPTIONS,因此我想用 OPTIONS 方法回复所有请求(使用“Microsoft Office Protocol Discovery”的用户代理发送),例如空的 200,因为 RFC 2616状态:
如果没有包含响应主体,则响应必须包含一个 Content-Length 字段,其字段值为“0”。
我倾向于使用 ISAPI 过滤器,它在基本身份验证发生之前响应 200 -。Windows 身份验证或匿名访问不是选项。我是否遗漏了其他替代方案?
答案1
是否可以采用严苛的方法,在 IIS 中全局拒绝 OPTIONS 动词?您可以安装URL扫描并把选项在里面[否认动词]配置。
答案2
我认为您可以使用 appcmd.exe 为网站禁用 WebDAV。您可以创建一个单独的网站来保存文档并在其上禁用 WebDAV 吗?这不会影响在同一服务器上运行的任何 Sharepoint 网站。
JR
答案3
对于评论来说有点太长了,所以我会滥用答案。事实上,这并不适用于你的问题,我不认为这种行为会困扰你,只是为了确保你知道这一点。
另一种方式,单击 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 服务器发出隐藏请求:
Mozilla/4.0(兼容;MSIE 7.0;Windows NT 5.1;.NET CLR 2.0 [...])
因此,我假设 Office 2007 实际上使用 IE 本身来执行请求。我还注意到 Office 2007 可以访问来自 IE 的 cookie。例如:当用户被授权使用 IE(使用 cookie;我尚未使用基本身份验证进行测试)时,Office 不会收到 301 重定向到登录页面。因此,当 Office 发出奇怪的请求时,它会将来自 IE 的 cookie 传递到服务器。它还可能将任何收到的 cookie 传递回 IE(我尚未对此进行测试)。
(感谢提供该知识库文章的链接!)
答案4
也许,您应该验证您的 iis6 配置。
在网站配置->主目录->配置->映射中,您是否有到.doc 扩展名的映射。
另一件事:网站配置->主目录->配置->映射->选项:启用会话状态选项,它是否处于活动状态?
另一件事:您在应用程序池中使用了更多的“工作者”吗?(不要使用多个) - 应用程序池->属性->性能-> Web 花园最大工作者数量->将其设置为“1”
有时,如果它有多个工作进程,“授权”可能会“丢失”