返回

Word 2021 (macOS) WebDAV 基础验证故障排查及解决

php

macOS 上 Word 2021 (16.84) WebDAV 基础验证故障排查

近期的报告指出,macOS 13 (Ventura) 上使用 Word 2021 (16.84) 通过基础身份验证连接 WebDAV 服务时出现问题。具体表现为,虽然用户会被提示输入用户名和密码,但 Word 实际发送的 Authorization 请求头为 Bearer(空值),而不是预期中的 Basic XXX。此问题发生在升级到 16.84 版本后,早期的版本如 16.81 运行正常。问题根源在于,Microsoft Office 应用(包括 Word)在特定版本中改变了 WebDAV 身份验证的处理方式,即使服务提示使用基础验证,部分情况下应用也会错误地尝试使用 OAuth 2.0 风格的 Bearer 令牌认证,导致验证失败。

问题分析

在排查此问题的过程中,确定问题的关键在于 Office 应用发送的身份验证信息不正确。应用本应发送包含编码凭据的 Authorization: Basic 请求头,但却错误地发送 Authorization: Bearer。这表明该版本应用可能在内部存在身份验证处理的错误或存在兼容性问题。此故障模式常见于 Office 升级后,特别是涉及到与旧协议交互时。问题出现并非 WebDAV 服务本身故障,而是 Office 应用不正确的验证处理行为导致。

解决方案

以下列出一些解决此问题的办法:

方案一:禁用 Microsoft Office 客户端令牌缓存

Office 应用内部的令牌缓存可能会导致身份验证行为异常。禁用缓存有时能够迫使应用重新进行验证协商,采用正确的基础验证。

操作步骤:

  1. 关闭所有 Microsoft Office 应用。
  2. 打开 "终端" 应用。
  3. 复制并执行以下命令:
defaults delete com.microsoft.office.plist MSOLogoutTokenCache
此命令会清除 Microsoft Office 的缓存文件。
  1. 重新打开Word,并再次尝试连接WebDAV服务器。

说明: 这项操作清除所有Microsoft Office的缓存token,对其他微软应用也有一定的影响,可能会要求用户重新登陆。但其风险较低。

方案二: 配置服务支持 Authorization: Bearer

假如允许对服务端修改,为了更好地应对此类问题,可以在服务端加入对空 Bearer 的解析,解析为 Basic 验证方式, 这能让新版 Microsoft Office 的应用不再出验证问题。这并不能解决根本的问题,而是在兼容新版Office的基础上保证正常服务可用。

操作步骤(以 PHP 和 sabre/dav 为例):

  1. sabre/dav 的身份验证逻辑中添加对 Bearer 令牌头的检查。
  2. 如果接收到空 Bearer 请求头,并且 WWW-Authenticate 中指定了 Basic 认证方式,尝试进行基础验证,可以基于现有的密码验证。

PHP 代码示例:

use Sabre\DAV\Auth\Plugin as AuthPlugin;

class CustomAuth extends AuthPlugin {
   function authenticate(\Sabre\HTTP\RequestInterface $request, \Sabre\HTTP\ResponseInterface $response) {
      $authorizationHeader = $request->getHeader('Authorization');

        if ($authorizationHeader === 'Bearer' || $authorizationHeader === 'Bearer ') {

         $authHeader =  $request->getHeader('WWW-Authenticate');

            //假如配置WWW-Authenticate中有Basic auth 则使用basic 尝试认证
            if (strpos($authHeader,'Basic')){
                    
                    $username = null;
                    $password = null;
                   //假设服务端能够基于请求从其他信息中获取用户名和密码
                    if (condition) { // 检查是否存在合适的验证逻辑
                           //根据情况获取正确的用户密码并验证,
                           if (username 和 password 匹配成功) {
                                 return true;
                                }
                           
                       }
                    //没有可用的basic信息 返回需要重新验证
                    return false; 
              }

            return false;//不是基本认证则失败,返回到上一步,继续检查是否为 Basic
       }
        // 使用 Sabre/DAV 的原有基本认证逻辑,例如从请求头解析Basic
      return parent::authenticate($request,$response);

   }


}

说明:

修改的 CustomAuth 验证函数中加入了判断是否是Bearer认证方式的判断。判断之后使用Basic 的方式获取账号和密码进行登录,如果Basic验证也失败则抛出错误,回到认证步骤重新进行验证。上述代码段是一个简化示例,请根据你的服务端架构调整,请注意密码安全性问题。

方案三:回退 Office 版本 (权宜之计)

如果上述方案均无法快速解决问题,可以将 Microsoft Office 版本回退至已知可正常工作的版本,例如 16.81,以此作为权宜之计。但这通常不是最佳方案,应作为解决根本问题的过渡办法。

操作步骤:

  1. 从 Microsoft 的下载源获取Office 16.81的安装包(如果可能)。
  2. 卸载当前版本的 Microsoft Office。
  3. 安装旧版本的 Microsoft Office。

说明: 降级存在一些潜在的问题,可能面临安全补丁更新,兼容性问题,应谨慎使用。

安全建议

在配置 WebDAV 服务时,建议采取以下措施来增强安全性:

  • 使用 HTTPS: 始终使用 HTTPS 加密 WebDAV 连接,保护传输中的数据。
  • 强密码策略: 确保用户设置强密码,并定期更改。
  • 限制 IP 访问: 将 WebDAV 服务的访问限制为已知的 IP 地址或网络范围。

这些措施可以帮助提高 WebDAV 服务和相关应用环境的安全。请及时更新应用程序,解决已知的安全隐患。