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

调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:32:39