python-3.x 易趣Oauth令牌-无法交换用户访问令牌的授权码

vuv7lop3  于 2023-02-10  发布在  Python
关注(0)|答案(3)|浏览(170)

我收到{“错误”:“invalid_client”,“错误描述”:“客户端身份验证失败”} 401响应。我确实设法获得了用户同意(docs:https://developer.ebay.com/api-docs/static/oauth-authorization-code-grant.html),方法是手动访问URL并登录到我的帐户:

import requests, urllib, base64

my_AppID = "someAppID"
my_Ru_Name = "someRuName"
scope = "https://api.ebay.com/oauth/api_scope/sell.fulfillment"
scope = urllib.parse.quote_plus(scope)

url = f"""https://auth.ebay.com/oauth2/authorize?
client_id={my_AppID}&
redirect_uri={my_Ru_Name}&
response_type=code&
scope={scope}&"""

我打印了url字符串,并在浏览器中访问它,登录并“同意”。此页面显示“授权成功完成”。因此我从新重定向页面url中获取代码值。此后,我无法将授权代码交换为用户访问令牌:

my_CertID = "someCertID"
client_id = base64.b64encode(my_AppID.encode())
client_secret = base64.b64encode(my_CertID.encode())
auth_string = "Basic " + client_id.decode() + ":" + client_secret.decode()

consent_code = "v%521.1%25i..................jYw" # from the page's link after logging in
consent_code = urllib.parse.quote_plus(code)

headers = {"Content-Type": "application/x-www-form-urlencoded", "Authorization": auth_string}
data = {"grant_type": "authorization_code", "code": consent_code , "redirect_uri": Ru_Name}
url_token = "https://api.ebay.com/identity/v1/oauth2/token"

resp = requests.post(url_token, headers=headers, data=data)
print(resp.text)

# the response I get:
{"error":"invalid_client","error_description":"client authentication failed"}

我做错了什么?是请求部分?还是编码?
我对这一切都有点陌生,所以提前感谢!

31moq8wy

31moq8wy1#

尝试以下操作:

client_id = my_AppID
client_secret = my_CertID
auth_string = "Basic " + base64.b64encode(client_id + ":" + client_secret)
nhhxz33t

nhhxz33t2#

我遇到了一些问题,但现在已经解决了,并使用drupal模块来获取我的访问令牌。我已经在apiauth.net上提供了这个服务。如果有任何帮助,请告诉我。

jgovgodb

jgovgodb3#

consent_code为url编码。您需要对其进行解码(使用在线服务)。
URL encoded的代码看起来像这样:v%5E1.1%23i%5E1%23f%5E0%23r... -这是错误的。在url解码之后,它看起来像这样:第1.1卷第一卷第一页第三卷第三页...

相关问题