You need to enable JavaScript to run this app. Axios携带FormData发起Post请求获取Azure AD令牌返回404错误
优惠活动
大模型
产品
解决方案
定价
更多

Axios携带FormData发起Post请求获取Azure AD令牌返回404错误

你遇到的是Node.js环境下Axios处理FormData的常见兼容性问题,可按以下步骤排查修复:

  • 核心原因:Axios默认的请求体转换逻辑会破坏FormData格式,且Node环境下FormData请求不会自动携带Content-Length请求头,导致Azure AD端点无法正常解析请求,误判为非法请求返回404。
  • 修复方案:修改Axios请求配置,关闭默认转换逻辑,手动补充Content-Length头,修改后代码如下:
const axios = require('axios')
const FormData = require('form-data')

async function getAzureToken() {
  const bodyFormData = new FormData()
    
  bodyFormData.append('client_id', <client id>)
  bodyFormData.append('client_secret', <secret>)
  bodyFormData.append('scope', <scope>)
  bodyFormData.append('requested_token_use', <token use>)
  bodyFormData.append('assertion', <token>)
  
  // 手动获取FormData长度
  const contentLength = await bodyFormData.getLength()

  try {
    const response = await axios.post(
      'https://login.microsoftonline.com/<tenantId>/oauth2/v2.0/token', 
      bodyFormData, 
      {
        headers: {
          ...bodyFormData.getHeaders(),
          'Content-Length': contentLength
        },
        // 关闭Axios默认的请求体转换,避免破坏FormData格式
        transformRequest: [(data) => data]
      }
    )
    console.log('AXIOS RESPONSE ', response)
  } catch (err) {
    // 可打印完整请求配置,排查参数、头信息是否正常
    console.log('AXIOS ERROR ', err)
  }
}

getAzureToken()
  • 其他排查方向:如果修改后仍报错,可升级Axios到1.4.0以上稳定版,部分旧版Axios对Node环境FormData支持存在已知bug;同时确认所有<占位符>替换后没有多余的前后空格、换行符,参数取值和Postman中完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 15:36:03