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

如何使用ajax复刻Postman的POST API请求获取OAuth2 access_token

问题核心原因

  1. 请求体格式不匹配
    微软OAuth 2.0 /oauth2/token 接口要求请求体为 application/x-www-form-urlencoded 格式,你当前代码中使用JSON.stringify()将参数序列化为了JSON字符串,不符合接口要求,会直接导致请求失败。
  2. 跨域限制与安全风险
    client_credentials 属于服务端授权流,Azure AD的token端点默认不允许前端跨域调用,且在前端代码中直接使用client_secret会导致密钥泄露,存在极高安全风险。

修正后的代码(仅格式修复,仍可能触发跨域)

$.ajax({
  type: 'POST',
  url: 'https://login.microsoftonline.com/***/oauth2/token',
  // 直接传入普通对象,jQuery会自动序列化为x-www-form-urlencoded格式
  data: {
    grant_type: 'client_credentials',
    client_id: '***',
    client_secret: '***',
    resource: 'https://analysis.windows.net/powerbi/api'
  },
  contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  success: data => {
    console.log(data.access_token)
  },
  error: (xhr, textStatus, error) => {
    // 打印完整响应信息方便排查
    console.log('错误详情:', error, xhr.responseText)
  }
});

最佳实践建议

前端场景不要使用client_credentials授权流,改用适配前端的authorization_code + PKCE授权流,走用户身份认证的方式获取访问令牌,避免密钥泄露。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:24:02