You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OneDrive for Business 守护进程无浏览器认证及上传实现咨询

适配场景的Microsoft Graph认证方案及Python实现

可用认证方案

针对无头虚拟机运行的守护进程场景,无需浏览器交互的认证方案共有2种,均符合微软Graph官方规范:

  • 客户端凭据流:最推荐的方案,属于服务级认证,仅需要你注册应用的客户端ID、客户端密钥、租户ID即可完成认证,不需要用户账号的密码等信息。要求你在Azure应用注册中为应用配置应用权限(而非委托权限),对应OneDrive访问权限可选择Files.ReadWrite.All,权限需要租户管理员完成同意操作。
  • 资源所有者密码凭据(ROPC)流:适用于你持有目标OneDrive用户的账号密码、且该账号未启用多因素认证的场景,需要配置委托权限,认证时直接传递账号密码获取访问令牌。该方案存在密码泄露风险,仅作为备选方案使用。

依赖安装

你需要先安装微软官方的Azure身份认证库和Graph核心SDK,安装命令如下:
pip install azure-identity msgraph-core

代码示例

1. 客户端凭据流实现(推荐)

from azure.identity import ClientSecretCredential
from msgraph.core import GraphClient

# 替换为你的实际配置信息
TENANT_ID = "你的Azure AD租户ID"
CLIENT_ID = "已注册应用的客户端ID"
CLIENT_SECRET = "你生成的客户端密钥"
# 目标OneDrive账号的用户主体名称,格式类似xxx@企业域名.com
TARGET_USER_UPN = "目标用户UPN"

# 初始化认证凭据
credential = ClientSecretCredential(
    tenant_id=TENANT_ID,
    client_id=CLIENT_ID,
    client_secret=CLIENT_SECRET,
    scopes=["https://graph.microsoft.com/.default"]
)

# 初始化Graph请求客户端
graph_client = GraphClient(credential=credential)

# 小文件上传示例(文件大小小于4MB)
def upload_small_file(local_path: str, onedrive_filename: str):
    with open(local_path, "rb") as file:
        content = file.read()
    resp = graph_client.put(
        f"/users/{TARGET_USER_UPN}/drive/root:/{onedrive_filename}:/content",
        data=content,
        headers={"Content-Type": "application/octet-stream"}
    )
    if resp.status_code in (200, 201):
        print(f"文件{onedrive_filename}上传成功")
        return resp.json()
    print(f"上传失败,错误码:{resp.status_code},错误信息:{resp.text}")
    return None

# 调用示例
# upload_small_file("./本地测试文件.pdf", "上传到OneDrive的文件名.pdf")

2. ROPC流实现(备选)

仅需要修改认证凭据的初始化部分,其余上传逻辑和上述代码完全一致:

from azure.identity import UsernamePasswordCredential

# 替换为实际的用户账号密码
USER_PASSWORD = "目标OneDrive用户的登录密码"

credential = UsernamePasswordCredential(
    client_id=CLIENT_ID,
    username=TARGET_USER_UPN,
    password=USER_PASSWORD,
    tenant_id=TENANT_ID
)

注意事项

  • 客户端凭据流的权限尽量最小化配置,可根据需求限制应用仅能访问指定用户的OneDrive空间,降低安全风险。
  • 若需要上传大于4MB的文件,需要使用Graph的分片上传接口,将文件拆分为多个分片依次上传即可。
  • 所有配置信息(客户端密钥、用户密码等)不要硬编码在代码中,建议通过环境变量或者加密配置文件存储。

内容的提问来源于stack exchange,提问作者Jordan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:09:02