C#调用Coinbase Pro API返回401未授权错误排查求助
Coinbase Pro API返回401未授权的常见排查点
- 本地时间与Coinbase服务器时间不同步(优先排查)
平台要求请求头里的CB-ACCESS-TIMESTAMP和服务器时间差不能超过30秒,若本地系统时间偏差过大就会触发401。可先调用平台时间接口获取官方时间校准本地时间后再生成签名。 - API密钥权限配置错误
首先确认创建API时已开启当前请求端点对应的权限:例如查询/accounts需要开通view权限,交易类端点需要开通trade权限;其次检查是否配置了IP白名单,当前发起请求的IP不在白名单内也会返回401;最后确认API密钥未过期、未被手动撤销。 - 签名规则不匹配
- 若请求带查询参数,
requestPath必须包含完整的查询字符串,例如请求/accounts?limit=20时,签名用的requestPath不能只写/accounts - POST/PUT请求的签名用
body必须和实际请求发送的body完全一致,不能有空格、换行、序列化格式的差异 - 签名用的timestamp必须和请求头
CB-ACCESS-TIMESTAMP的值完全一致,不可两次生成不同的时间戳
- 若请求带查询参数,
- 环境配置不匹配
若使用沙箱环境测试,请求地址应为https://api-public.sandbox.pro.coinbase.com,使用生产环境的密钥请求沙箱地址、或沙箱密钥请求生产地址都会返回401。 - 代理/网络修改请求头
若使用代理发起请求,需确认代理不会修改你配置的CB-*系列请求头,请求头被篡改会导致签名校验失败。
补充:你当前贴出的GET请求逻辑、签名生成逻辑本身符合平台要求,签名方法虽然命名为GetHMACInHex,但最终返回Base64格式的哈希值是符合Coinbase签名规则的,无需修改这块逻辑。
内容的提问来源于stack exchange,提问作者Hizzy
相关产品推荐
相关产品推荐

