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 进行身份验证请求。
不确定这是否始终是我上述问题的答案,但我认为这是我 运行 遇到的问题的组合。这是我如何解决我遇到的问题的基础知识。
- 删除 Office Webdav 缓存。 Office 非常积极地缓存有关 Webdav 服务器的信息。缓存位于注册表中的以下位置:
Computer\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\X\Common\Internet\Server Cache
其中 X 是您安装的 Office 的当前版本。删除所有具有服务器 URL. 的子项
- 不要为您的 Webdav 使用
localhost
或 127.0.0.1
。如果 Office 知道您的服务器是本地服务器,它的行为似乎会有所不同。这可能意味着需要在您的 hosts
文件中添加条目以“欺骗”它认为您的网站位于远程服务器上。
- 如果使用某种联合身份验证(Azure AD、Google、Facebook 等)并且您使用的是不记名令牌,则需要告知 Office 去哪里进行身份验证,这是通过响应来完成的non-authenticated 状态为
401
且 WWW-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]"
- 即使设置了客户端 ID,应用注册中的
Application ID URI
似乎也需要与服务器的基础 URL(协议 + 主机 + 端口) 相匹配
我正在实施一个 webdav 服务器。我的匿名访问一切正常,但现在我想要求身份验证。
当用户点击 link 打开 word 文档时(我使用的是 ms-word:
协议),Word 会发送几个 HTTP OPTIONS 请求,首先是一个空的 [= Authorization
header 中的 11=] 值,服务器用 WWW-Authenticate
header 响应,一切正常(用户使用 Word 进行身份验证后,word 发送在 header).
但是,当 Word 本身请求文件时(使用 HTTP GET),没有 Authorization
header。我试过让服务器响应 401
状态,但当它响应时,Word 只是放弃并通知用户文件无法打开。
更麻烦的是,据我所知,Word 并行发送 GET 和 OPTIONS 请求,因此在发送 GET 请求时,它不知道它将使用 OPTIONS 进行身份验证请求。
不确定这是否始终是我上述问题的答案,但我认为这是我 运行 遇到的问题的组合。这是我如何解决我遇到的问题的基础知识。
- 删除 Office Webdav 缓存。 Office 非常积极地缓存有关 Webdav 服务器的信息。缓存位于注册表中的以下位置:
Computer\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\X\Common\Internet\Server Cache
其中 X 是您安装的 Office 的当前版本。删除所有具有服务器 URL. 的子项
- 不要为您的 Webdav 使用
localhost
或127.0.0.1
。如果 Office 知道您的服务器是本地服务器,它的行为似乎会有所不同。这可能意味着需要在您的hosts
文件中添加条目以“欺骗”它认为您的网站位于远程服务器上。 - 如果使用某种联合身份验证(Azure AD、Google、Facebook 等)并且您使用的是不记名令牌,则需要告知 Office 去哪里进行身份验证,这是通过响应来完成的non-authenticated 状态为
401
且WWW-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]"
- 即使设置了客户端 ID,应用注册中的
Application ID URI
似乎也需要与服务器的基础 URL(协议 + 主机 + 端口) 相匹配