使用CDP JWT认证调用Coinbase App V2交易接口分页时返回401未授权问题排查
关于CDP JWT认证调用Coinbase V2接口分页的问题
我正在使用CDP私密API密钥,通过JWT Bearer认证(ES256算法)调用Coinbase App V2接口,未采用旧版CB-ACCESS-* HMAC请求头。
正常请求(返回200 OK)
GET /v2/userGET /v2/accounts/BTCGET /v2/accounts/ETHGET /v2/accounts/USDGET /v2/accounts/{account_id}/transactions(仅第一页)
示例:
GET /v2/accounts/BTC返回有效的BTC钱包账户对象,ETH和USD接口同理。
调用GET /v2/accounts/<btc_account_id>/transactions返回200 OK,同时返回分页信息:
{ "ending_before": null, "limit": 25, "next_starting_after": "<cursor_id>", "next_uri": "/v2/accounts/<btc_account_id>/transactions?starting_after=<cursor_id>", "order": "desc", "previous_ending_before": null, "previous_uri": null, "starting_after": null }
失败请求(返回401 Unauthorized)
GET /v2/accounts/<btc_account_id>/transactions?starting_after=<cursor_id>- 直接调用返回的
next_uri
BTC、ETH、USD账户均出现相同问题。
Python示例代码
import json, time, secrets, jwt, requests from urllib.parse import urlencode with open("cdp_api_key.json") as f: cfg = json.load(f) key_name = cfg["name"] private_key = cfg["privateKey"] def auth_get(path, params=None): q = "" if params: q = "?" + urlencode(params) full = f"{path}{q}" now = int(time.time()) payload = { "sub": key_name, "iss": "cdp", "nbf": now, "exp": now + 120, "uri": f"GET api.coinbase.com{full}", } headers = { "kid": key_name, "nonce": secrets.token_hex(16), } token = jwt.encode(payload, private_key, algorithm="ES256", headers=headers) return requests.get( "https://api.coinbase.com" + path, headers={"Authorization": f"Bearer {token}"}, params=params, timeout=30, ) r1 = auth_get("/v2/accounts/<btc_account_id>/transactions") cursor = r1.json()["pagination"]["next_starting_after"] r2 = auth_get( "/v2/accounts/<btc_account_id>/transactions", {"starting_after": cursor}, ) print(r1.status_code) # 200 print(r2.status_code) # 401 print(r2.text)
额外观察
GET /v2/user请求正常,显示该Coinbase用户关联一个旧的真实账户GET /v2/accounts接口返回结果不完整,未包含BTC/ETH/USD账户,但直接调用GET /v2/accounts/BTC、ETH、USD接口可正常获取信息- 部分带查询参数的
/v2/accounts请求也会从200变为401
问题咨询
有没有人成功使用CDP JWT认证实现Coinbase App V2交易接口的分页功能?我需要确定以下哪种情况导致该问题:
- 当存在查询参数时,JWT的
uri声明格式错误 - CDP密钥不支持Coinbase V2接口分页,或该功能存在故障
- 这些接口仅支持通过OAuth用户令牌实现正确分页的内容
内容的提问来源于stack exchange,提问作者Sobo
相关产品推荐
相关产品推荐

