【问题标题】:Coinbase.com invalid signatureCoinbase.com 无效签名
【发布时间】:2017-06-08 03:34:33
【问题描述】:

我搜索了其他帖子,因为我不是唯一有签名问题的人。我尝试了几种语言,但总是遇到同样的问题。

我在使用 coinbase.com 的 API 身份验证方面做错了什么:

# normally I fetch the timestamp from https://api.coinbase.com/v2/time
TIMESTAMP=$(date +%s)
SIG=$(echo -n "${TIMESTAMP}GET/v2/accounts" | hmac256 --stdkey $COINBASE_SECRET)

curl https://api.coinbase.com/v2/accounts \
  --header "CB-ACCESS-KEY: $COINBASE_KEY" \
  --header "CB-ACCESS-SIGN: $SIG" \
  --header "CB-ACCESS-TIMESTAMP: $TIMESTAMP" \
  --header "CB-VERSION: 2016-03-08"

我正在尝试做类似的事情:

nonce := strconv.FormatInt(int64(time.Data.Epoch), 10)
message := nonce + req.Method + endpoint // endpoint "/v2/accounts"
req.Header.Set("CB-ACCESS-KEY", a.Key)
h := hmac.New(sha256.New, []byte(a.Secret))
h.Write([]byte(message))

signature := hex.EncodeToString(h.Sum(nil))

req.Header.Set("CB-ACCESS-SIGN", signature)
req.Header.Set("CB-ACCESS-TIMESTAMP", nonce)
req.Header.Set("CB-VERSION", "2016-03-08")

由于api.sandbox.coinbase.com 不可用,似乎不再支持沙盒?!

亲切的问候

【问题讨论】:

  • 使用 time.Now().Unix(),或者更好,使用library
  • @Mark 提到的 golang 库已经过时,仍然使用 v1

标签: bash curl go signature coinbase-api


【解决方案1】:

对于 bash/curl,问题在于我与 echo 一起使用的 hmac 工具。以下为我处理 curl 请求:

SIG=$(echo -n "${TIMESTAMP}GET/v2/accounts" | openssl dgst -sha256 -hmac "$COINBASE_SECRET" |cut -d' ' -f2);

关于 golang,我比较了哈希值,得出的结论是,我正在使用的当前库有些问题。

我自己编写了一个库 (https://github.com/Zauberstuhl/go-coinbase),现在它就像一个魅力。 除了我使用Sprintf 进行最终编码之外,我正在执行与上面相同的操作,但这应该是相同的。

还是谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    相关资源
    最近更新 更多