E5全局账号Rclone长期配置获取

前言

对于拥有 Microsoft E5 开发人员或者商业订阅的用户来说,如何高效管理组织内的大量 OneDrive 空间一直是个痛点。传统的 Rclone 配置通常基于 "Delegated (委托)" 权限,需要定期(通常是90天)重新授权,且每个账号都需要单独配置,维护起来非常繁琐。

本文将介绍一种利用 Microsoft Graph API 的 Client Credentials (客户端凭据) 模式进行配置的方法。其核心优势在于:

  1. 长期有效:我们可以手动申请有效甚至长达 100 年的密钥,彻底告别 periodic re-authentication。
  2. 全组织通用:只需创建一个应用(App),即可通过修改 drive_id 挂载组织内任意用户的 OneDrive,无需重复申请 API。
  3. 自动化友好:非常适合服务器端的自动化备份任务,因为不需要交互式登录。

⚠️ 必须注意的安全风险
本教程使用的权限是 Files.ReadWrite.All (Application 级别)。这意味着获得此配置文件(Client ID 和 Secret)的人,实际上拥有读写该组织下所有用户 OneDrive 和 SharePoint 站点数据的最高权限

  • 请务必像保管银行密码一样保管您的 client_secret
  • 严禁将此配置文件分发给不可信的第三方。
  • 建议仅在您自己完全控制的服务器上使用此配置。

第一步:注册应用并获取租户 ID

  1. 使用管理员账号登录 Microsoft Entra 管理中心 (原 Azure AD)
    https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView
  2. 在“概览”页面,找到并复制 租户 ID (Tenant ID),保存备用。
  3. 点击左侧菜单的“应用注册” -> “新注册”。
  4. 名称:任意填写,例如 Rclone-Global
  5. 受支持的账户类型
    • 推荐:选择第一项 “仅此组织目录中的帐户 (单租户)”。这是最标准且安全的做法。
    • 备选:如果您在后续配置或使用某些特定第三方工具(如 AList/OpenList)遇到权限报错,可以尝试重新注册并选择第三项 “任何组织目录(任何 Microsoft Entra ID 租户)中的帐户和个人 Microsoft 帐户”,这通常具有更广泛的兼容性。
  6. 重定向 URI:留空即可。
  7. 点击“注册”。
  8. 注册完成后,在应用概览页面复制 应用程序(客户端) ID (Client ID)对象 ID (Object ID),保存备用。

第二步:申请长期密钥

普通界面创建的密钥有效期最长通常只有 24 个月。我们可以通过 Graph API 绕过此限制,申请一个自定义有效期的密钥。

  1. 访问 Graph Explorer 并使用管理员账号登录:
    https://developer.microsoft.com/zh-cn/graph/graph-explorer
  2. 将请求方式从 GET 改为 POST
  3. 在请求地址栏输入以下 URL(将其中的 {id} 替换为您上一步复制的 对象 ID):
    https://graph.microsoft.com/v1.0/applications/{id}/addPassword
  4. 在下方的 "Request body" (请求正文) 中输入以下 JSON:
    { "passwordCredential": { "displayName": "Rclone-LongTerm", "endDateTime": "2125-12-30T00:00:00Z" } }
    (注:这里的 endDateTime 可以自定义,设为 100 年后基本等同于永久)
  5. 如果这是您第一次使用 Graph Explorer,可能会提示权限不足。点击 "Modify permissions",搜索 Application.ReadWrite.All 并点击 "Consent" 进行授权。
  6. 点击 Run query
  7. 关键步骤:在下方的 "Response preview" (响应预览) 中,找到 secretText 字段。立即复制并保存这个值,由于安全原因,它只显示一次,这就是您的 客户端密钥 (Client Secret)

第三步:授予应用高等级权限

  1. 回到 Entra 管理中心,打开您刚刚注册的应用。
  2. 点击左侧“API 权限” -> “添加权限” -> “Microsoft Graph”。
  3. 选择 “应用程序权限” (Application permissions) *(注意:不是委托权限)*。
  4. 搜索并勾选以下权限:
    • Files.Read.All
    • Files.ReadWrite.All
  5. 点击“添加权限”。
  6. 重要:添加完成后,权限状态会显示“未授予”。必须点击列表上方的 “代表 [您的组织名称] 授予管理员同意” 按钮,并确认。状态变为绿色的“已授予”才算成功。

第四步:获取目标用户的 Drive ID

虽然我们有了全局权限,但 Rclone 需要知道具体挂载哪个用户的网盘。我们需要获取该用户的 drive_id

  1. 回到 Graph Explorer,这次用您想要挂载网盘的那个用户账号登录。
  2. 将请求方式改回 GET
  3. 请求地址修改为:
    https://graph.microsoft.com/v1.0/users/{userUPN}/drive
    (将 {userUPN} 替换为目标用户的完整邮箱地址,例如 admin@example.com)
  4. 在 "Modify permissions" 中同意 Files.Read.All
  5. 点击 Run query
  6. 在响应结果中,找到 id 字段(通常是一串长字符串)。这就是该用户的 drive_id

第五步:编写 Rclone 配置文件

现在我们集齐了:

  • 租户 ID (tenant_id)
  • 客户端 ID (client_id)
  • 客户端密钥 (client_secret)
  • Drive ID (drive_id)

直接在您的 VPS 或电脑上编辑 rclone.conf 文件(或使用文本编辑器新建),填入以下内容:

[onedrive-user-a]
type = onedrive
driver = onedrive
# 您的租户 ID
tenant = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# 您的应用程序(客户端) ID
client_id = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# 您获取的长期密钥
client_secret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# 开启客户端凭据模式
client_credentials = true
# 账号类型通常为 business
drive_type = business
# 目标用户的 Drive ID
drive_id = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

如何添加第二个用户?

非常简单!您不需要重新注册应用,也不需要重新申请密钥。只需要重复“第四步”获取另一个用户的 drive_id,然后复制上面的配置段落,修改 [名称]drive_id 即可:

[onedrive-user-b]
type = onedrive
... (tenant, client_id, client_secret 保持完全一致) ...
drive_id = 另一个用户的以b开头的drive_id

通过这种方式,您可以迅速为组织内的成百上千个账号建立索引或备份任务,极大地简化了运维成本。


参考来源:

  1. Rclone OneDrive Documentation
  2. OpenList Guide
  3. Hostloc Thread*
实用教程

Scaleway STARDUST 1G硬盘安装Alpine Linux

2024-8-4 10:13:40

VPS评测服务器评测

Azure免费学生机测评

2022-3-6 21:41:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索