Coinbase Oauth2 - 令牌请求URL - " 404未找到"

时间:2015-06-17 18:25:14

标签: url oauth-2.0 coinbase-api

Coinbase Oauth授权的第一步似乎工作正常。 我通过以下网址请求客户代码:

"https://www.coinbase.com/oauth/authorize?response_type=code&client_id=XXXXXXXXXXXXXXXXXXXX&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=user+balance"

我通过URL取回代码.. 然后尝试使用给定的CODE和CLIENT SECRET以及CLIENT ID请求令牌:

"https://api.coinbase.com/oauth/token&grant_type=authorization_code&code=XXXXXXX&redirect_uri=urn:ietf:wg:oauth:2.0:oob&client_id=XXXXXXX&client_secret=XXXXXXX"

我得到了一个" 404 Not found"误差..

网址中是否有明显的错误..或者它很可能是一个问题 代码或秘密等本身? 如果是..那里有什么重要的知识吗?

从描述中得到的所有内容: https://developers.coinbase.com/docs/wallet/authentication

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您粘贴的网址:

https://api.coinbase.com/oauth/token&grant_type=authorization_code&code=XXXXXXX&redirect_uri=urn:ietf:wg:oauth:2.0:oob&client_id=XXXXXXX&client_secret=XXXXXXX

不包含查询组件,因为那里没有?个字符。你应该使用:

https://api.coinbase.com/oauth/token?grant_type=authorization_code&code=XXXXXXX&redirect_uri=urn:ietf:wg:oauth:2.0:oob&client_id=XXXXXXX&client_secret=XXXXXXX

看起来您指向的文档就是该错误的来源。

此外,OAuth 2.0规范要求对令牌端点使用POST,这也在文档中说明,但未在示例中明确说明。因此,您应该将参数作为表单编码值发送到HTTP POST,例如相当于以下cURL请求:

curl -d "grant_type=authorization_code&code=XXXXXXX&redirect_uri=urn:ietf:wg:oauth:2.0:oob&client_id=XXXXXXX&client_secret=XXXXXXX" https://api.coinbase.com/oauth/token

答案 1 :(得分:2)

要求它作为POST BODY完成了这项工作! 虽然有重大变化: - 重定向uri需要是一个合适的外部域,uri移动应用程序将创建一个401错误.. - 在ascii中编码

            import urllib
            import urllib.request
            import urllib.parse
            data = urllib.parse.urlencode({'grant_type':'authorization_code', 'code': 'XXXXXX', 
            'redirect_uri': 'https://XXXXXX', 'client_id': 'XXXXXXXXXXX', 
            'client_secret' : 'XXXXXXXXXXX'})
            binary_data = data.encode('ascii')

            try:
                response = urllib.request.urlopen('https://api.coinbase.com/oauth/token', data=binary_data)
                print(response.status)
                print(response.read())
            except urllib.error.HTTPError as e:
                print('%s %s' %(e.code, e.reason))

得到了粗略的结构: https://docs.python.org/3/library/urllib.request.html

非常感谢您的快速帮助!