调用FreeAgent API获取Access Token时遭遇401权限拒绝问题求助
FreeAgent API获取Access Token时401错误排查
我正在开发一个Node.js项目,用来把FreeAgent集成到我们的各类系统里。按照文档走完授权流程拿到了授权码,但用内部API服务器调用token_endpoint获取Access Token时,收到了401 HTTP Basic: Access denied.的响应,找不到问题出在哪。
以下是调用FreeAgent API的代码:
try { let clientId = 'OAuth identifier from dashboard'; let clientSecret = 'OAuth secret from dashboard'; let base64 = btoa(`${clientId}:${clientSecret}`); let response = await axios.post(`https://api.freeagent.com/v2/token_endpoint`, { grant_type: 'authorization_code', code: authCode, redirect_uri: 'http%3A%2F%2Flocalhost%3A3001%2Ffreeagent%2Fconnected' }, { headers: { 'Content-Type': 'application/json', 'Authorization': `Basic ${base64}` } }); console.log(response); } catch (error) { console.log(error); }
排查建议:
- 核对Client ID/Secret:确认从FreeAgent控制台复制的
clientId和clientSecret没有多余空格、大小写错误,Secret这类字符串容易复制漏字符,仔细检查。 - 替换Base64编码方式:Node.js的
btoa()对特殊字符支持不佳,改用内置Buffer处理更可靠:let base64 = Buffer.from(`${clientId}:${clientSecret}`).toString('base64'); - 修正请求体格式:FreeAgent的token端点要求用
application/x-www-form-urlencoded格式传参,不是JSON。调整代码如下:let response = await axios.post(`https://api.freeagent.com/v2/token_endpoint`, new URLSearchParams({ grant_type: 'authorization_code', code: authCode, redirect_uri: 'http://localhost:3001/freeagent/connected' // 无需手动URL编码,URLSearchParams会自动处理 }), { headers: { 'Authorization': `Basic ${base64}` } }); - 检查Redirect URI一致性:确保代码里的
redirect_uri和FreeAgent控制台配置的回调地址完全一致,包括协议、端口、路径,不能有编码或字符差异。 - 重新获取授权码:授权码只能用一次,如果之前试过调用token接口,得重新走授权流程拿新的授权码再测试。
内容的提问来源于stack exchange,提问作者user18079786
相关产品推荐
相关产品推荐

