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

Python调用Microsoft Access Token接口遇400 Bad Request错误求助

排查Microsoft OAuth2.0令牌请求400错误的步骤

1. 核对请求参数的完整性与正确性

令牌请求必须包含以下必填参数,缺一不可:

  • grant_type:固定值为authorization_code
  • code:直接使用获取到的完整授权码字符串(不要带code=前缀)
  • client_id:你的Azure AD应用注册的客户端ID
  • redirect_uri:必须和获取授权码时使用的地址完全一致(包括协议、域名、路径,大小写也要严格匹配)
  • client_secret(仅机密客户端,如Web应用需要):应用注册的客户端密钥

如果是桌面类公共客户端,请勿添加client_secret参数,否则会触发错误。

2. 确认授权码的有效性

  • 授权码仅能使用一次,一旦尝试过兑换令牌(哪怕失败),都需要重新获取新的授权码
  • 授权码有效期通常为10分钟,若获取后间隔过久再请求令牌,会直接失效

3. 检查请求的提交方式与内容类型

  • 必须使用POST请求,且请求头的Content-Type需设置为application/x-www-form-urlencoded,不能用JSON格式提交参数
  • 参数需以键值对形式编码,避免多余空格或转义错误,示例格式:grant_type=authorization_code&code=xxx&client_id=xxx...

4. 验证应用注册的配置

  • 确认应用注册后台已添加对应的redirect_uri,且类型匹配(如Web应用选Web类型,桌面应用选公共客户端/移动类型)
  • 如果请求中包含scope参数,需确保这些权限是获取授权码时已申请的,且应用注册已获得对应权限

5. 获取具体错误详情

修改代码捕获并打印响应的具体内容,这是定位问题的核心:

import requests

try:
    response = requests.post(
        "https://login.microsoftonline.com/common/oauth2/v2.0/token",
        data={
            "grant_type": "authorization_code",
            "code": "你的授权码",
            "client_id": "你的客户端ID",
            "redirect_uri": "你的重定向URI",
            "client_secret": "你的客户端密钥(按需添加)"
        }
    )
    response.raise_for_status()
except requests.exceptions.HTTPError as e:
    print("错误详情:", response.text)
    raise

响应文本中的error和error_description字段会给出明确原因,比如invalid_grant(授权码无效)、redirect_uri_mismatch(重定向URI不匹配)等。

6. 核对授权码获取流程的一致性

确保获取授权码的请求中,response_type为code,且client_id、redirect_uri、scope参数和令牌请求中的完全一致,无遗漏或错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:15:28