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

如何在Python中实现MS Project Online OData接口的NTLM认证?

解决Python访问MS Project Online OData API的NTLM认证问题

核心原因

MS Project Online(云端版)的OData API不支持传统NTLM认证,它依赖Azure AD的OAuth 2.0现代身份验证体系。你用浏览器和Power BI能成功获取数据,是因为它们自动触发了Azure AD的认证流程,而非原生NTLM。

无需Azure应用注册的可行方案

如果不想在Azure门户注册应用,可以使用用户名密码流(ROPC),直接用你的AD账号密码获取访问令牌,无需额外应用注册(注意:此方式不支持开启MFA的账号,且需要租户允许该流程)。

实现步骤

  1. 安装依赖库:
pip install requests msal
  1. 编写Python脚本:
import requests
import msal

# 配置参数
tenant_id = "你的租户ID(可填租户域名,如company.de)"
client_id = "00000003-0000-0ff1-ce00-000000000000"  # 微软内置的Power BI客户端ID,无需注册
username = "你的AD账号,格式如prename.lastname@company.de"
password = "你的账号密码"
api_url = "https://mycompany.sharepoint.com/sites/myprojectinstance/_api/ProjectData/"

# 获取访问令牌
authority = f"https://login.microsoftonline.com/{tenant_id}"
scope = ["https://mycompany.sharepoint.com/sites/myprojectinstance/_api/ProjectData/.default"]

app = msal.PublicClientApplication(client_id, authority=authority)
result = app.acquire_token_by_username_password(username, password, scopes=scope)

if "access_token" in result:
    # 发起API请求
    headers = {
        "Authorization": f"Bearer {result['access_token']}",
        "Accept": "application/json;odata=verbose"
    }
    response = requests.get(api_url, headers=headers)
    response.raise_for_status()  # 抛出HTTP错误便于排查
    print(response.json())
else:
    print(f"令牌获取失败: {result.get('error_description')}")

为什么NTLM认证无效

云端的MS Project Online已完全迁移至Azure AD身份验证框架,传统NTLM是本地AD的认证方式,云端服务不再接受直接的NTLM请求。

注意事项

  • 若你的账号开启了MFA(多因素认证),ROPC流无法使用,必须注册Azure应用并采用交互式认证流程。
  • 需确保租户管理员已允许ROPC认证流(默认可能禁用,需在Azure AD的身份验证方法中配置)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:19:50