[错误]:OneDrive(个人)身份验证无限期卡在“连接到 OneDrive” + 解决方法

作者: Rej-Linux创建于 2026年8月13日更新于 2026年9月3日
标签bug

发生了什么? OneDrive(个人)身份验证无限期地卡在“正在连接到 OneDrive…请不要关闭此模态窗口”。随后的“检查连接”失败,出现通用错误:请求失败,状态 400。 根本原因:插件的文件夹创建请求在创建 OneDrive 应用程序文件夹内的 Vault 子文件夹时使用了 @microsoft.graph.conflictBehavior: "replace"。根据 Microsoft 自己的 Graph API 文档,replace 仅支持文件,不支持文件夹 - 文件夹应该使用 fail 或 rename。这导致 OneDrive 拒绝请求,出现通用 400 错误,插件不会将此错误呈现给用户,因此用户界面永远处于挂起状态。 这发生在任何首次连接时,其中 Vault 命名的子文件夹尚不存在于 /Apps/remotely-save/ 目录下 - 即任何新 Vault,或任何 Vault 文件夹已删除且需要重新创建。 可重现步骤 通过 Remotely Save 将 Vault 连接到 OneDrive(个人),其中 /Apps/remotely-save/<vault-name>/ 尚不存在 认证成功完成(令牌交换成功) 插件 GET /v1.0/drive/special/approot/children → 200 OK,确认文件夹为空 插件 POST 到 /v1.0/drive/special/approot/children 以创建 Vault 子文件夹 → 400 Bad Request 模态窗口永远卡在“正在连接到 OneDrive”上;没有错误呈现给用户 重启 Obsidian 并单击“检查连接”可重现相同的 400 错误 请求失败 POST https://graph.microsoft.com/v1.0/drive/special/approot/children Content-Type: application/json Authorization: Bearer <redacted> { "@microsoft.graph.conflictBehavior": "replace", "folder": {}, "name": "REJ" } Response HTTP/1.1 400 Bad Request Content-Type: application/json { "error": { "code": "invalidRequest", "message": "Invalid request", "innerError": { "client-request-id": "<redacted>", "date": "2026-08-13T16:08:07", "request-id": "<redacted>" } } } 参考 Microsoft 自己的文档关于 driveItem: copy 状态:“replace 值仅支持文件;具有冲突的文件夹使用 fail 行为代替。”(https://learn.microsoft.com/en-us/graph/api/driveitem-copy?view=graph-rest-1.0) - 同一限制似乎也适用于通过 POST /children 创建文件夹。 解决方法 手动在 onedrive.live.com 上在 /Apps/remotely-save/ 目录中创建带有 Vault 名称的子文件夹,然后运行检查连接。由于插件仅在文件夹不存在时尝试创建请求,因此预先创建它可让插件直接跳过该问题。 环境 操作系统:Ubuntu(Linux),Obsidian 通过 Flatpak 安装(md.obsidian.Obsidian) Obsidian 版本:1.13.7 远程服务:OneDrive for personal(应用程序文件夹/免费版) 通过 mitmdump HTTPS 拦截插件的实际 Graph API 流量来确认 如何诊断此问题 通过 mitmdump 跟踪整个 OAuth + Graph API 流程(通过代理 Obsidian 的 Flatpak 进程,以便在需要时进行修改)

内容来源: remotely-save/remotely-save