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

Node.js调用Coinbase V2 REST接口返回无效签名问题排查求助

Coinbase V2 REST接口无效签名错误修复方案

核心问题点

  • 缺少必填的CB-VERSION请求头:Coinbase V2 API强制要求所有请求携带该头,取值为YYYY-MM-DD格式的API版本号,建议使用近期正式版本如2022-10-01,缺失该参数会直接触发签名校验失败。
  • 本地时钟与服务端时间偏差过大:签名依赖的Unix时间戳和Coinbase服务器时间差不能超过30秒,需确保本地设备时钟和NTP服务同步。
  • API密钥配置错误:需确认使用的是Coinbase普通版(非Pro/Advanced Trade)的API密钥,且创建密钥时已经勾选了对应接口的访问权限(如调用/v2/user需要开启用户读取权限)。
  • 签名用参数与实际请求不一致:后续使用带查询参数的GET请求时,签名用的path需要包含完整查询字符串;POST请求的签名用body必须和实际发送的请求体完全一致,不能有额外空格或格式差异。

修正后代码

const { createHmac } = require('crypto');
const axios = require('axios');

(async () => {

  const cbApiKey = 'xxx';
  const apiSecret = 'xxx';
  const method = 'GET';
  const path = '/v2/user';
  const body = '';
 
  const timestamp = Math.floor(new Date().getTime() * 1e-3);
  const message = timestamp + method + path + body;

  const key = Buffer.from(apiSecret, 'base64');
  const cbAccessSign = createHmac('sha256', key).update(message).digest('base64');

  const instance = axios.create();

  try {
    const user = await instance.request({
      method,
      url: `https://api.coinbase.com${path}`,
      headers: {
        'CB-ACCESS-KEY': `${cbApiKey}`,
        'CB-ACCESS-SIGN': `${cbAccessSign}`,
        'CB-ACCESS-TIMESTAMP': `${timestamp}`,
        'CB-VERSION': '2022-10-01',
        "Content-Type": 'application/json',
      },
    }); 
    console.log(user.data);
  } catch (error) {
    console.log(error.response?.data || error.message);
  }  
})();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:15:01