【问题标题】:Office always requests file as anonymous userOffice 始终以匿名用户身份请求文件
【发布时间】:2021-02-18 22:56:07
【问题描述】:

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

当用户单击链接以打开 word 文档(我使用的是ms-word: 协议)时,Word 会发送几个 HTTP OPTIONS 请求,首先在 Authorization 标头中带有一个空的 Bearer 值,服务器以 WWW-Authenticate 标头对其进行响应,并且一切正常(用户使用 Word 进行身份验证后,word 发送后续 HTTP OPTIONS 请求,标头中包含令牌值)。

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

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

【问题讨论】:

    标签: ms-office webdav


    【解决方案1】:

    不确定这是否永远是我上述问题的答案,但我认为这是我遇到的问题的组合。以下是我如何解决我遇到的问题的基本知识。

    1. 删除 Office Webdav 缓存。 Office 非常积极地缓存有关 Webdav 服务器的信息。缓存位于注册表中的以下位置:Computer\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\X\Common\Internet\Server Cache 其中 X 是您安装的当前 Office 版本。删除所有具有您的服务器 URL 的子项。
    2. 请勿将localhost127.0.0.1 用于您的Webdav。如果 Office 知道您的服务器是本地的,则它的行为似乎有所不同。这可能意味着需要在您的 hosts 文件中添加条目,以“欺骗”它认为您的网站位于远程服务器上。
    3. 如果使用某种联合身份验证(Azure AD、Google、Facebook 等)并且您正在使用不记名令牌,则需要告知 Office 去哪里进行身份验证,这是通过使用以下方式响应未经过身份验证的请求来完成的401 状态和 WWW-Authenticate 标头值设置为类似这样(我可以确认这适用于 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(协议 + 主机 + 端口)

    【讨论】:

    • 有趣,您是说您对使用 AzureAD 的应用程序进行了身份验证吗?上次我尝试您的建议时,这不是有效的,我必须实施 MS-OFBA。
    • 是的,我让它与 Azure AD、Facebook 和 Twitter 一起工作(适用于我的应用程序和 MS-OFBA)。我对我的应用程序进行了 Google 身份验证,但是关于 Office 网络视图中的 Google 登录页面的某些内容会导致 office 关闭模式窗口并出现错误。对话框。
    • 嗨@BrianBall,我们正在尝试做同样的事情。但是在 Azure 登录对话框中输入密码后,我们遇到了问题。 AADSTS500011 – 在名为 [guid] 的租户中找不到名为 [URI] 的资源主体。如果租户管理员未安装应用程序或未获得租户中任何用户的同意,则可能会发生这种情况。您可能已将身份验证请求发送给错误的租户。你在 Azure 中有什么具体的配置吗?
    • 我的意思是我们正在尝试在没有 MS-OFBA 的情况下实施 Azure AD
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 2012-09-10
    相关资源
    最近更新 更多