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
非常感谢您的帮助!
答案 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
非常感谢您的快速帮助!