【问题标题】:Invalid signature when signing Coinbase request, why?签署 Coinbase 请求时签名无效,为什么?
【发布时间】:2021-04-25 21:37:43
【问题描述】:

根据Coinbase pro API docs

CB-ACCESS-SIGN 标头是通过在 prehash 字符串时间戳 + 上使用 base64 解码的密钥创建 sha256 HMAC 生成的 方法 + requestPath + 正文(其中 + 表示字符串连接) 并对输出进行 base64 编码。时间戳值与 CB-ACCESS-TIMESTAMP 标头。

body 是请求正文字符串,如果没有请求则省略 正文(通常用于 GET 请求)。

方法应该是大写。

我从一个更好的程序员那里借来了一个签名函数,并给它提供了如下内容:

1619383731POST/reports{{"end_date":"2021-01-02T11:59:59Z","start_date":"2020-01-01T00:00:00Z","type":"account"}}

但不断从 Coinbase 获得无效签名。

签名功能供参考:

// sign
func (e *exchange) sign(msg string) string {
    key, err := base64.StdEncoding.DecodeString(e.http.secret)
    if e.checkErr(err) {
        return "bad_sig"
    }
    signature := hmac.New(sha256.New, key)
    _, err = signature.Write([]byte(msg))
    if e.checkErr(err) {
        return "bad_sig"
    }
    return base64.StdEncoding.EncodeToString(signature.Sum(nil))
}

我在哪里搞砸了?

【问题讨论】:

    标签: go coinbase-api


    【解决方案1】:

    您是否检查过 go-coinbase github 存储库,将其实现为: https://github.com/preichenberger/go-coinbasepro/blob/master/client.go

    h := make(map[string]string)
        h["CB-ACCESS-KEY"] = c.Key
        h["CB-ACCESS-PASSPHRASE"] = c.Passphrase
        h["CB-ACCESS-TIMESTAMP"] = timestamp
    
        message := fmt.Sprintf(
            "%s%s%s%s",
            timestamp,
            method,
            url,
            data,
        )
    
        sig, err := generateSig(message, c.Secret)
        if err != nil {
            return nil, err
        }
        h["CB-ACCESS-SIGN"] = sig
        return h, nil
    

    【讨论】:

    • 是的,实际上我就是从那里借用了sign函数的。
    • msg := fmt.Sprintf("%s%s%s%s", timestamp, e.req.Method, e.req.URL.Path, e.req.Body, ) - - 生成 Coinbase 要求的内容,所以我不知道为什么签名被拒绝。
    【解决方案2】:

    原来直接使用req.Body 是罪魁祸首。为什么我不知道,我需要找出一些东西,但是读入 []byte 然后转换为字符串可以解决部分问题。

    【讨论】:

      猜你喜欢
      • 2019-01-12
      • 2015-04-21
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      • 2019-04-07
      • 1970-01-01
      相关资源
      最近更新 更多