gpt4 book ai didi

python - 如何通过 requests-oauthlib token 获取避免 InValidClientError?

转载 作者:行者123 更新时间:2023-12-05 05:19:34 27 4
gpt4 key购买 nike

我正在使用来自 requests-oauthlib 的标准 oauth2 网络流程示例从 QuickBooks Online 的 API 获取 token ,但是当我成功重定向到 QBO 站点、授权并返回代码以请求 token 时,我得到了:

oauthlib.oauth2.rfc6749.errors.InvalidClientError

当我实际发出 token 请求时出错。在谷歌上搜索了很多,似乎我没有正确授权。 QBO 表示实际请求可能如下所示:

POST https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer HTTP/1.1
Accept: application/json
Authorization: Basic UTM0dVBvRDIwanp2OUdxNXE1dmlMemppcTlwM1d2
NzRUdDNReGkwZVNTTDhFRWwxb0g6VEh0WEJlR3dheEtZSlVNaFhzeGxma1l
XaFg3ZlFlRzFtN2szTFRwbw==
Content-Type: application/x-www-form-urlencoded
Host: oauth.platform.intuit.com
Body: grant_type=authorization_code&
code=L3114709614564VSU8JSEiPkXx1xhV8D9mv4xbv6sZJycibMUI&
redirect_uri=https://www.mydemoapp.com/oauth-redirect

我需要像这样生成授权 header :

"基本"+ base64encode(client_id + ":"+ client_secret)

我已经像这样创建了上面的内容:

auth_code = client_id + ":" + client_secret
auth_code = base64.b64encode(bytes(auth_code, 'utf-8'))
auth_code = auth_code.decode('utf-8')

但是在 token 代码中传递它,例如:

token = qbo.fetch_token(token_url, code=code, authorization_response=redirect_uri, headers={'Authorization' : auth_code})

导致 InvalidClientError 消息。我觉得我真的很接近,但在最后的 oauth2 障碍上失败了,但是有人可以帮我授权 token 吗?

非常感谢,约翰

------ 编辑 1 -----

感谢 stovfl,这非常有帮助,我现在根据您的建议尝试了一些新事物。我刚刚更新了代码,使其看起来像这样:

headers = {'Accept':'application/json'}
headers.update({'Content-Type': 'application/x-www-form-urlencoded'})
auth = HTTPBasicAuth(client_id, client_secret)
body = 'grant_type=authorization_code&code=' + code + '&redirect_uri=' + redirect_uri_token
token = qbo.fetch_token(token_url, auth=auth, body=body, headers=headers)

这产生了另一个错误:

ValueError: Please supply either code or authorization_response parameters.

检查实际的 oauth 库代码,必须提供代码/authresponse,所以我再次更新以从回调中获取代码并在我的 fetch_token 请求中使用它:

all_args = request.args.to_dict()
code = all_args['code']
headers = {'Accept':'application/json'}
headers.update({'Content-Type': 'application/x-www-form-urlencoded'})
auth = HTTPBasicAuth(client_id, client_secret)
body = 'grant_type=authorization_code&code=' + code + '&redirect_uri=' + redirect_uri_token
token = qbo.fetch_token(token_url, code=code, auth=auth, body=body, headers=headers)

我也试过删除代码,只在主调用中,所以主体看起来像这样:

body = 'grant_type=authorization_code' + '&redirect_uri=' + redirect_uri_token

但无论哪种方式,现在都会回到之前的错误:

oauthlib.oauth2.rfc6749.errors.InvalidClientError: (invalid_client)

我不确定从这里到哪里去。

最佳答案

Question: QuickBooks intuit Developer: Exchange authorization code for access token, using OAut2.0.

根据给定的Request例子,你应该这样做:

  1. LINE:POST https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer HTTP/1.1

    POST 到 https://oauth.plat... HTTP 版本 1.1,默认使用 OAuth2.fetch_token(...

    url_endpoint = 'https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer'
  2. LINE: Accept: application/json

    您必须接受 application/jsonOAuth2.fetch_token(... 默认接受任何内容。无事可做,但为了完整起见,您可以将其定义如下:

    headers = {'Accept':'application/json'}
  3. LINE:授权:基本 a2V5OnNlY3JldA==

    要求您在基本身份验证 header 中传递身份验证凭据

    from requests.auth import HTTPBasicAuth
    auth = HTTPBasicAuth(client_id, client_secret)
  4. LINE: Content-Type: application/x-www-form-urlencoded

    body 数据必须通过form-urlencoded

    headers.update({'Content-Type': 'application/x-www-form-urlencoded'})
  5. LINE:主机:oauth.platform.intuit.com

    用户特定,无关

  6. 行:正文:grant_type=authorization_code&code=L311...&redirect_uri=https://www.mydemoapp.com/oauth-redirect

    body 中的数据放置。

    body = 'grant_type=authorization_code&code=L311...&redirect_uri=https://www.mydemoapp.com/oauth-redirect'
  7. 访问 token 交换授权码

    token = qbo.fetch_token(url_endpoint, auth=auth, body=body, headers=headers)

Note: Cant't verify with QuickBooks intuit Developer but requests give me the following Request Message:

Request Message:

headers:
Accept: application/json
Accept-Encoding: gzip, deflate
Content-Length: 139
User-Agent: python-requests/2.11.1
Authorization: Basic a2V5OnNlY3JldA==
Host: ... omited, because user specific
Content-Type: application/x-www-form-urlencoded
form:
grant_type: authorization_code
code: L3114709614564VSU8JSEiPkXx1xhV8D9mv4xbv6sZJycibMUI
redirect_uri: https://www.mydemoapp.com/oauth-redirect

使用 Python:3.4.2 - requests:2.11.1 测试

关于python - 如何通过 requests-oauthlib token 获取避免 InValidClientError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45768567/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com