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

Microsoft OAuth获取Access Token请求出现400 Bad Request错误求助

Microsoft授权码流获取Access Token时400错误排查方案

以下是针对你遇到的400 Bad Request错误的具体排查方向:

1. 修正Client Secret的传递格式

你的代码中client_secret: 3ak...未用引号包裹,会被当作数值类型处理,而URLSearchParams要求所有参数必须是字符串。修改为:

client_secret: "3ak...", // 加上引号,确保为字符串类型

2. 验证Code Verifier与Code Challenge的一致性

授权码流中,code_verifier必须和获取授权码时生成code_challenge的原始字符串完全匹配,且哈希算法为S256。可以用以下代码验证:

async function checkCodeChallengeMatch(verifier, challenge) {
  const encoder = new TextEncoder();
  const verifierBytes = encoder.encode(verifier);
  const hash = await crypto.subtle.digest('SHA-256', verifierBytes);
  const base64UrlHash = btoa(String.fromCharCode(...new Uint8Array(hash)))
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=+$/, '');
  return base64UrlHash === challenge;
}

// 调用验证
checkCodeChallengeMatch("gVCClLeSnLF6zZAGm0LknUze38cHnTA1w27p0EF6vKGy6H3xDdyLHw", "aepyAU0M6wE8wRsEDUgp5G0VHpz5-qIAkG5dnuiHWpM")
  .then(match => console.log("验证结果:", match ? "匹配" : "不匹配"));

如果返回不匹配,说明code_verifier错误,需要重新生成正确的verifier和challenge对。

3. 确认授权码的有效性

  • 授权码只能使用一次,如果之前已用该code请求过token,必须重新获取新的授权码。
  • 检查传递的code是否和回调URL中的完全一致,避免复制时出现截断或字符遗漏。

4. 检查请求参数的编码与完整性

  • 打印body.toString()查看最终的表单参数,确认所有字段(client_id、scope、redirect_uri等)都正确编码且无遗漏。
  • 不要在请求头中添加Authorization字段,Microsoft的token端点不需要Basic认证,直接通过form参数传递client_id和client_secret即可。

5. 核对应用注册配置

  • 确认Azure应用注册的支持的账户类型设置为任何组织目录中的账户和个人Microsoft账户,对应你使用的consumers租户。
  • 确保应用注册中添加的重定向URL和代码中的redirect_uri完全一致(包括协议、端口、路径)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:55:24