使用 Requests-OAuthlib 的 OAuth1 身份验证失败

Posted

技术标签:

【中文标题】使用 Requests-OAuthlib 的 OAuth1 身份验证失败【英文标题】:OAuth1 authentication using Requests-OAuthlib failing 【发布时间】:2020-06-05 08:55:47 【问题描述】:

我正在尝试使用 Requests-OAuthlib 对 OAuth1 进行身份验证,但它失败了。我正在从以下网站获取帮助:

https://requests-oauthlib.readthedocs.io...#oauth-1-0

>> client_key = 'xxxx'
>> client_secret = 'xxxx'
>> callback_uri = 'https://127.0.0.1/callback'
>> request_token_url='https://rest.immobilienscout24.de/restapi/security/oauth/request_token',
>> access_token_url='https://rest.immobilienscout24.de/restapi/security/oauth/access_token',
>> authorize_url='https://rest.immobilienscout24.de/restapi/security/oauth/confirm_access',
>> oauth_session = OAuth1Session(client_key,client_secret=client_secret, callback_uri=callback_uri)
>> oauth_session.fetch_request_token(request_token_url)




Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/desktop/Documents/anaconda/anaconda3/envs/py27/lib/python2.7/site-packages/requests_oauthlib/oauth1_session.py", line 287, in fetch_request_token
    token = self._fetch_token(url, **request_kwargs)
  File "/Users/desktop/Documents/anaconda/anaconda3/envs/py27/lib/python2.7/site-packages/requests_oauthlib/oauth1_session.py", line 365, in _fetch_token
    r = self.post(url, **request_kwargs)
  File "/Users/desktop/Documents/anaconda/anaconda3/envs/py27/lib/python2.7/site-packages/requests/sessions.py", line 578, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/Users/desktop/Documents/anaconda/anaconda3/envs/py27/lib/python2.7/site-packages/requests/sessions.py", line 516, in request
    prep = self.prepare_request(req)
  File "/Users/desktop/Documents/anaconda/anaconda3/envs/py27/lib/python2.7/site-packages/requests/sessions.py", line 459, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
  File "/Users/desktop/Documents/anaconda/anaconda3/envs/py27/lib/python2.7/site-packages/requests/models.py", line 318, in prepare
    self.prepare_auth(auth, url)
  File "/Users/desktop/Documents/anaconda/anaconda3/envs/py27/lib/python2.7/site-packages/requests/models.py", line 549, in prepare_auth
    r = auth(self)
  File "/Users/desktop/Documents/anaconda/anaconda3/envs/py27/lib/python2.7/site-packages/requests_oauthlib/oauth1_auth.py", line 109, in __call__
    unicode(r.url), unicode(r.method), None, r.headers
  File "/Users/desktop/Documents/anaconda/anaconda3/envs/py27/lib/python2.7/site-packages/oauthlib/oauth1/rfc5849/__init__.py", line 313, in sign
    ('oauth_signature', self.get_oauth_signature(request)))
  File "/Users/desktop/Documents/anaconda/anaconda3/envs/py27/lib/python2.7/site-packages/oauthlib/oauth1/rfc5849/__init__.py", line 136, in get_oauth_signature
    normalized_uri = signature.base_string_uri(uri, headers.get('Host', None))
  File "/Users/desktop/Documents/anaconda/anaconda3/envs/py27/lib/python2.7/site-packages/oauthlib/oauth1/rfc5849/signature.py", line 144, in base_string_uri
    raise ValueError('uri must include a scheme and netloc')
ValueError: uri must include a scheme and netloc

请教如何解决这个问题

【问题讨论】:

【参考方案1】:

据我了解,此错误是由以下原因引起的:

normalized_uri = signature.base_string_uri(uri, headers.get('Host', None))

在这段代码中,uriNone,所以它会在标题中使用Host

headers.get('Host', None)

但是,标头中的 Host 将不包含架构,Host 看起来像:

www.google.com

Host 中没有 https://。您可能需要向库报告错误。


还有一个库(我是作者),和requests-oauthlib共享一个熟悉的API,可以查看:https://docs.authlib.org/en/latest/client/oauth1.html

from authlib.integrations.requests_client import OAuth1Session

【讨论】:

以上是关于使用 Requests-OAuthlib 的 OAuth1 身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章

python 有关如何将Flask与requests-oauthlib一起使用以使用OAuth 2令牌获取GitHub用户配置文件的示例。

手机上如何使用oa系ǻ

云原生之Docker实战使用docker部署o2oa企业OA平台

中小企业使用办公oa软件的好处有哪些?

蓝凌oa系统如何?希望大家给点中肯的意见

中小企业使用oa办公软件有没有必要?