Office 始终以匿名用户身份请求文件

Office always requests file as anonymous user

我正在实施一个 webdav 服务器。我的匿名访问一切正常,但现在我想要求身份验证。

当用户点击 link 打开 word 文档时(我使用的是 ms-word: 协议),Word 会发送几个 HTTP OPTIONS 请求,首先是一个空的 [= Authorization header 中的 11=] 值,服务器用 WWW-Authenticate header 响应,一切正常(用户使用 Word 进行身份验证后,word 发送在 header).

中带有令牌值的 follow-up HTTP OPTIONS 请求

但是,当 Word 本身请求文件时(使用 HTTP GET),没有 Authorization header。我试过让服务器响应 401 状态,但当它响应时,Word 只是放弃并通知用户文件无法打开。

更麻烦的是,据我所知,Word 并行发送 GET 和 OPTIONS 请求,因此在发送 GET 请求时,它不知道它将使用 OPTIONS 进行身份验证请求。

不确定这是否始终是我上述问题的答案,但我认为这是我 运行 遇到的问题的组合。这是我如何解决我遇到的问题的基础知识。

  1. 删除 Office Webdav 缓存。 Office 非常积极地缓存有关 Webdav 服务器的信息。缓存位于注册表中的以下位置:Computer\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\X\Common\Internet\Server Cache 其中 X 是您安装的 Office 的当前版本。删除所有具有服务器 URL.
  2. 的子项
  3. 不要为您的 Webdav 使用 localhost127.0.0.1。如果 Office 知道您的服务器是本地服务器,它的行为似乎会有所不同。这可能意味着需要在您的 hosts 文件中添加条目以“欺骗”它认为您的网站位于远程服务器上。
  4. 如果使用某种联合身份验证(Azure AD、Google、Facebook 等)并且您使用的是不记名令牌,则需要告知 Office 去哪里进行身份验证,这是通过响应来完成的non-authenticated 状态为 401WWW-Authenticate header 值被设置为类似这样的请求(我可以确认这适用于 Azure AD):
Bearer authorization_uri="https://login.microsoftonline.com/[Tenant ID]/oauth2/authorize",trusted_issuers="https://login.microsoftonline.com/*/",client_id="[Azure AD App Client ID]"
  1. 即使设置了客户端 ID,应用注册中的 Application ID URI 似乎也需要与服务器的基础 URL(协议 + 主机 + 端口)
  2. 相匹配