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

Coinbase API调用报invalid_token:仅持API密钥不知如何传Bearer令牌

解决Coinbase API "invalid_token" 错误:API Key/Secret的正确认证方式

你遇到的问题根源在于用错了认证方式:你手里的是API Key和API Secret,但你用了OAuth 2.0的Bearer Token认证头,这两种是完全不同的认证体系,所以Coinbase返回了invalid_token错误。

Coinbase对于API Key/Secret的认证要求是HMAC签名认证,而不是简单的Bearer Token。下面是具体的解决步骤:

1. 理解HMAC签名认证的核心要素

每个请求需要带上这几个关键请求头:

  • CB-ACCESS-KEY: 你的API Key
  • CB-ACCESS-SIGN: 基于请求内容生成的HMAC-SHA256签名(十六进制格式)
  • CB-ACCESS-TIMESTAMP: 当前的Unix时间戳(秒级)
  • CB-VERSION: 你已经在用的2015-04-08(这个没问题)

2. 手动生成签名并构造curl请求

在Ubuntu终端里可以分步骤操作:

第一步:获取当前时间戳

TIMESTAMP=$(date +%s)

第二步:构造签名字符串

对于你的GET请求,签名字符串格式是:timestamp + 请求方法 + 请求路径 + 请求体(GET请求的请求体为空,所以最后一部分留空):

SIGN_STRING="${TIMESTAMP}GET/v2/accounts/3e3835d3----/addresses"

第三步:生成HMAC-SHA256签名

用你的API Secret作为密钥,对上面的字符串生成签名并转成十六进制:

API_SECRET="你的API密钥密码"
SIGNATURE=$(echo -n "$SIGN_STRING" | openssl dgst -sha256 -hmac "$API_SECRET" | sed 's/^.* //')

第四步:执行正确的curl请求

把生成的参数带入请求头:

curl -k -X GET "https://api.coinbase.com/v2/accounts/3e3835d3----/addresses" \
  -H "CB-VERSION: 2015-04-08" \
  -H "accept: application/json;charset=utf-8" \
  -H "CB-ACCESS-KEY: 你的API密钥" \
  -H "CB-ACCESS-TIMESTAMP: $TIMESTAMP" \
  -H "CB-ACCESS-SIGN: $SIGNATURE"

3. 注意事项

  • 时间戳必须和请求发送时间同步(误差不能超过30秒),否则会报invalid_timestamp错误
  • 签名字符串的拼接必须严格按照timestamp+method+path+body的顺序,不能有空格或者多余字符
  • 如果是POST请求,需要把请求体(JSON格式)也加入到签名字符串中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:15:38