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

Coinbase Oauth2 - token request URL - "404 Not found"

Coinbase Oauth 授权的第一步似乎工作正常。 我通过以下 URL:

请求客户代码
"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”错误..

URL中是否有任何明显的错误..或者它很可能是 代码或秘密等本身? 如果是.. 有什么重要的信息要知道吗?

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

非常感谢您的帮助!

您粘贴的URL:

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

请求它作为 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

非常感谢您的快速帮助!