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

使用MSAL Python库适配O365邮件脚本遇AADSTS900144错误求助

解决AADSTS900144错误:请求体必须包含'client_id'

1. 确认MSAL生成授权URL时已正确传入client_id

get_authorization_request_url的正常工作依赖于初始化客户端时传入正确的client_id,生成URL时该参数会自动附加到查询参数中。检查你的代码是否符合以下示例:

import msal

# 初始化客户端,确保client_id与应用注册页的ID完全一致
app = msal.PublicClientApplication(
    client_id="你的应用client_id",
    authority="https://login.microsoftonline.com/你的租户ID"
)

# 生成授权URL,scope和redirect_uri需匹配应用注册配置
auth_url = app.get_authorization_request_url(
    scopes=["Mail.Send", "offline_access"],
    redirect_uri="你的重定向URI"
)
print(auth_url)

直接打印生成的URL,确认其中包含client_id=你的应用ID这个查询参数。如果没有,说明初始化客户端时client_id传入错误或方法调用存在遗漏。

2. 检查应用注册的重定向URI类型配置

若URL中已包含client_id但仍报错,可能是应用注册里的重定向URI类型配置错误:

  • 桌面/移动端应用(Public Client)需选择"公共客户端/native (移动&桌面)"类型
  • Web应用(Confidential Client)需选择"Web"类型
    错误的类型配置会导致Azure AD对请求参数的位置产生异常要求。

3. 排查授权码交换token的请求环节

如果错误实际发生在获取授权码后交换access token的步骤中(可能混淆了环节),需确保该POST请求的请求体包含client_id。使用MSAL内置方法可自动处理参数传递:

# 用MSAL方法自动构造请求体,无需手动拼接参数
result = app.acquire_token_by_authorization_code(
    code="获取到的授权码",
    scopes=["Mail.Send", "offline_access"],
    redirect_uri="你的重定向URI"
)

该方法会自动在请求体中传入client_id、client_secret(机密客户端场景)等必填参数。

4. 升级MSAL版本

你使用的1.21.0版本较旧,可能存在参数传递的已知问题,建议升级到稳定版本:

pip install --upgrade msal

AADSTS900144错误核心是Azure AD未在指定请求环节收到必填的client_id参数,优先排查授权URL的参数完整性,再依次检查应用配置、token交换步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:10:02