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
相关产品推荐
相关产品推荐

