【问题标题】:Authenticating into a REST API in parameters在参数中对 REST API 进行身份验证
【发布时间】:2017-08-27 16:54:14
【问题描述】:

我正在尝试熟悉一下这个 REST API:

https://docs.gemini.com/rest-api/#private-api-invocation

但是,我试图弄清楚他们是如何进行身份验证的,而且他们似乎不使用 OAuth。他们是这样说的:

Gemini 使用 API 密钥来允许访问私有 API。您可以通过登录并在 Settings/API 中创建密钥来获取这些信息。这将为您提供用作用户名的“API 密钥”和用于签署消息的“API 密钥”。

所有请求都必须包含一个随机数,一个永远不会重复的数字,并且必须在请求之间增加。这是为了防止捕获先前请求的攻击者简单地重放该请求。我们建议使用毫秒或更高精度的时间戳。随机数只需要相对于消息所在的会话增加。

现在,我不知道在哪里放置我的 API 密钥。他们并没有真正为它指定参数名称。随机数也是如此。此外,nonce 是否需要随机化?随机数应该是多少?我对这个不是很熟悉。

【问题讨论】:

    标签: rest api


    【解决方案1】:

    docs you linked 中所述,您需要对X_GEMINI_PAYLOAD 标头的"request""nonce""order_id" 进行base64 编码,并使用X-GEMINI-SIGNATURE 标头的API Secret 对有效载荷进行SHA384 编码。

    这是来自网站的示例(Python):

    import requests
    import base64
    import hmac
    from hashlib import sha384
    
    url = "https://api.gemini.com/v1/order/status"
    
    gemini_api_key = "mykey"
    gemini_api_secret = "1234abcd"
    
    # for the purposes of this example, we've shown hand-rolled JSON - please import json and use json.dumps in your real code!
    b64 = base64.b64encode("""{
        "request": "/v1/order/status",
        "nonce": 123456,
    
        "order_id": 18834
    }
    """)
    
    signature = hmac.new("1234abcd", b64, hashlib.sha384).hexdigest()
    
    headers = {
        'Content-Type': "text/plain",
        'Content-Length': "0",
        'X-GEMINI-APIKEY': gemini_api_key,
        'X-GEMINI-PAYLOAD': b64,
        'X-GEMINI-SIGNATURE': signature,
        'Cache-Control': "no-cache"
    }
    
    response = requests.request("POST", url, headers=headers)
    
    print(response.text)
    

    【讨论】:

    • 好的,因为我没有使用 python。让我问你,我必须编码成 b64 的字符串到底是什么:“”{“request”:“/v1/order/status”,“nonce”:123456,“order_id”:18834 }“”?我不确定所有引号现在,我的第二个问题是为什么签名必须散列为十六进制字符串?
    • 他们似乎只希望您使用{ "request": "/v1/order/status", "nonce": 123456, "order_id": 18834 }。对于第二个问题,我始终找不到答案。
    • 为什么会有三个引号,这在python中是不是很正常?
    • 老实说,我不知道,这正是文档中所说的,尽管当我测试它时,""" 实际上是错误的。我自己并不是一个 Python 人,所以......
    猜你喜欢
    • 2018-09-11
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 2012-08-29
    相关资源
    最近更新 更多