为了账号安全,请及时绑定邮箱和手机立即绑定

签名 Coinbase 请求时签名无效,为什么?

签名 Coinbase 请求时签名无效,为什么?

Go
紫衣仙女 2022-08-24 19:01:44
根据Coinbase pro API文档:CB-ACCESS-SIGN 标头是通过使用预哈希字符串时间戳 + 方法 + requestPath + 正文(其中 + 表示字符串串联)上的 base64 解码密钥创建 sha256 HMAC 并对输出进行 base64 编码而生成的。时间戳值与 CB-ACCESS-TIMESTAMP 标头相同。正文是请求正文字符串,如果没有请求正文,则省略(通常用于 GET 请求)。该方法应为大写。我从一个更好的程序员那里借用了一个签名函数,并给它提供如下内容:1619383731POST/reports{{"end_date":"2021-01-02T11:59:59Z","start_date":"2020-01-01T00:00:00Z","type":"account"}}但是继续从Coinbase获得无效的签名。签名功能供参考:// signfunc (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))}我在哪里搞砸了?
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

你有没有检查过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


查看完整回答
反对 回复 2022-08-24
?
白衣非少年

TA贡献1155条经验 获得超0个赞

事实证明,直接使用是罪魁祸首。为什么我不知道,我需要找出一些东西,但是读一个,然后投射到一个字符串中,可以解决其中的一部分。req.Body[]byte



查看完整回答
反对 回复 2022-08-24
  • 2 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信