开发者界面

OAuth 1.0

class requests_oauthlib.OAuth1(client_key, client_secret=None, resource_owner_key=None, resource_owner_secret=None, callback_uri=None, signature_method='HMAC-SHA1', signature_type='AUTH_HEADER', rsa_key=None, verifier=None, decoding='utf-8', client_class=None, force_include_body=False, **kwargs)

使用 OAuth 1 (RFC5849) 对请求进行签名

client_class

Client 类的别名

OAuth 1.0 会话

class requests_oauthlib.OAuth1Session(client_key, client_secret=None, resource_owner_key=None, resource_owner_secret=None, callback_uri=None, signature_method='HMAC-SHA1', signature_type='AUTH_HEADER', rsa_key=None, verifier=None, client_class=None, force_include_body=False, **kwargs)

OAuth 舞蹈的请求签名和便利方法。

OAuth1Session 和 OAuth1 有什么区别?

OAuth1Session 实际上在内部使用 OAuth1,其目的是通过便利方法来协助 OAuth 工作流,以准备授权 URL 并解析各种令牌和重定向响应。它还提供响应的基本验证。

使用基本 CLI 应用程序和 Twitter 的 OAuth 工作流示例。

>>> # Credentials obtained during the registration.
>>> client_key = 'client key'
>>> client_secret = 'secret'
>>> callback_uri = 'https://127.0.0.1/callback'
>>>
>>> # Endpoints found in the OAuth provider API documentation
>>> request_token_url = 'https://api.twitter.com/oauth/request_token'
>>> authorization_url = 'https://api.twitter.com/oauth/authorize'
>>> access_token_url = 'https://api.twitter.com/oauth/access_token'
>>>
>>> oauth_session = OAuth1Session(client_key,client_secret=client_secret, callback_uri=callback_uri)
>>>
>>> # First step, fetch the request token.
>>> oauth_session.fetch_request_token(request_token_url)
{
    'oauth_token': 'kjerht2309u',
    'oauth_token_secret': 'lsdajfh923874',
}
>>>
>>> # Second step. Follow this link and authorize
>>> oauth_session.authorization_url(authorization_url)
'https://api.twitter.com/oauth/authorize?oauth_token=sdf0o9823sjdfsdf&oauth_callback=https%3A%2F%2F127.0.0.1%2Fcallback'
>>>
>>> # Third step. Fetch the access token
>>> redirect_response = input('Paste the full redirect URL here.')
>>> oauth_session.parse_authorization_response(redirect_response)
{
    'oauth_token: 'kjerht2309u',
    'oauth_token_secret: 'lsdajfh923874',
    'oauth_verifier: 'w34o8967345',
}
>>> oauth_session.fetch_access_token(access_token_url)
{
    'oauth_token': 'sdf0o9823sjdfsdf',
    'oauth_token_secret': '2kjshdfp92i34asdasd',
}
>>> # Done. You can now make OAuth requests.
>>> status_url = 'http://api.twitter.com/1/statuses/update.json'
>>> new_status = {'status':  'hello world!'}
>>> oauth_session.post(status_url, data=new_status)
<Response [200]>
authorization_url(url, request_token=None, **kwargs)

通过将 request_token 和可选的 kwargs 附加到 url 来创建授权 URL。

这是 OAuth 1 工作流中的第二步。用户应被重定向到此授权 URL,授予您访问权限,然后被重定向回您。重定向回可以是在客户端注册期间指定,也可以通过为每个请求提供回调 URI。

参数:
  • url – 授权端点 URL。

  • request_token – 之前获取的请求令牌。

  • kwargs – 要附加到 URL 的可选参数。

返回:

嵌入新参数的授权 URL。

使用已注册的默认回调 URI 的示例。

>>> request_token_url = 'https://api.twitter.com/oauth/request_token'
>>> authorization_url = 'https://api.twitter.com/oauth/authorize'
>>> oauth_session = OAuth1Session('client-key', client_secret='secret')
>>> oauth_session.fetch_request_token(request_token_url)
{
    'oauth_token': 'sdf0o9823sjdfsdf',
    'oauth_token_secret': '2kjshdfp92i34asdasd',
}
>>> oauth_session.authorization_url(authorization_url)
'https://api.twitter.com/oauth/authorize?oauth_token=sdf0o9823sjdfsdf'
>>> oauth_session.authorization_url(authorization_url, foo='bar')
'https://api.twitter.com/oauth/authorize?oauth_token=sdf0o9823sjdfsdf&foo=bar'

使用显式回调 URI 的示例。

>>> request_token_url = 'https://api.twitter.com/oauth/request_token'
>>> authorization_url = 'https://api.twitter.com/oauth/authorize'
>>> oauth_session = OAuth1Session('client-key', client_secret='secret', callback_uri='https://127.0.0.1/callback')
>>> oauth_session.fetch_request_token(request_token_url)
{
    'oauth_token': 'sdf0o9823sjdfsdf',
    'oauth_token_secret': '2kjshdfp92i34asdasd',
}
>>> oauth_session.authorization_url(authorization_url)
'https://api.twitter.com/oauth/authorize?oauth_token=sdf0o9823sjdfsdf&oauth_callback=https%3A%2F%2F127.0.0.1%2Fcallback'
property authorized

布尔值,指示此会话是否具有 OAuth 令牌。如果 self.authorized 为 True,则可以合理地期望对资源的 OAuth 受保护请求成功。如果 self.authorized 为 False,则需要用户通过 OAuth 身份验证流程,然后对资源的 OAuth 受保护请求才能成功。

fetch_access_token(url, verifier=None, **request_kwargs)

获取访问令牌。

这是 OAuth 1 工作流中的最后一步。访问令牌是使用所有先前获取的凭据(包括授权步骤中的验证器)获取的。

请注意,为了方便起见,先前设置的验证器将被重置,否则在连续请求中签名创建将不正确。

>>> access_token_url = 'https://api.twitter.com/oauth/access_token'
>>> redirect_response = 'https://127.0.0.1/callback?oauth_token=kjerht2309uf&oauth_token_secret=lsdajfh923874&oauth_verifier=w34o8967345'
>>> oauth_session = OAuth1Session('client-key', client_secret='secret')
>>> oauth_session.parse_authorization_response(redirect_response)
{
    'oauth_token: 'kjerht2309u',
    'oauth_token_secret: 'lsdajfh923874',
    'oauth_verifier: 'w34o8967345',
}
>>> oauth_session.fetch_access_token(access_token_url)
{
    'oauth_token': 'sdf0o9823sjdfsdf',
    'oauth_token_secret': '2kjshdfp92i34asdasd',
}
fetch_request_token(url, realm=None, **request_kwargs)

获取请求令牌。

这是 OAuth 1 工作流中的第一步。通过向 url 发出签名后的 post 请求来获取请求令牌。然后从 application/x-www-form-urlencoded 响应中解析令牌,并准备好用于构建授权 url。

参数:
  • url – 请求令牌端点 URL。

  • realm – 请求访问的领域列表。

  • request_kwargs – 传递给 ‘’requests.Session’’ 中的 ‘’post’’ 函数的可选参数

返回:

以字典格式响应。

请注意,为了方便起见,先前设置的 callback_uri 将被重置,否则在连续请求中签名创建将不正确。

>>> request_token_url = 'https://api.twitter.com/oauth/request_token'
>>> oauth_session = OAuth1Session('client-key', client_secret='secret')
>>> oauth_session.fetch_request_token(request_token_url)
{
    'oauth_token': 'sdf0o9823sjdfsdf',
    'oauth_token_secret': '2kjshdfp92i34asdasd',
}
parse_authorization_response(url)

从授权后重定向响应 URL 中提取参数。

参数:

url – 用户从 OAuth 提供商重定向回您(客户端)时产生的完整 URL。

返回:

从 URL 中提取的参数字典。

>>> redirect_response = 'https://127.0.0.1/callback?oauth_token=kjerht2309uf&oauth_token_secret=lsdajfh923874&oauth_verifier=w34o8967345'
>>> oauth_session = OAuth1Session('client-key', client_secret='secret')
>>> oauth_session.parse_authorization_response(redirect_response)
{
    'oauth_token: 'kjerht2309u',
    'oauth_token_secret: 'lsdajfh923874',
    'oauth_verifier: 'w34o8967345',
}
rebuild_auth(prepared_request, response)

在被重定向时,我们应该始终去除 Authorization 头,因为根据 OAuth 规范,nonce 可能无法被重用。

OAuth 2.0

class requests_oauthlib.OAuth2(client_id=None, client=None, token=None)

向请求添加授权证明(OAuth2 令牌)。

class requests_oauthlib.TokenUpdated(token)

OAuth 2.0 会话

requests_oauthlib.OAuth2Session(client_id=, client=, auto_refresh_url=, auto_refresh_kwargs=, scope=, redirect_uri=, token=, state=, token_updater=, pkce=, **kwargs)

适用于 requests.Session 的通用 OAuth 2 扩展。

支持遵守 oauthlib.oauth2.Client 规范的任何授权类型,包括四个核心 OAuth 2 授权。

可用于创建授权网址、获取令牌和使用您习惯的 requests.Session 接口访问受保护的资源。

请注意,您将从 Python 中使用隐式授权的唯一时间是,当您正在驱动能够获取 URL 片段的用户代理时。

authorization_url(url, state=, **kwargs)

生成授权 URL。

参数:
  • url – 授权端点 URL,必须是 HTTPS。

  • state – 用于 CSRF 保护的可选状态字符串。如果没有给出,它将为您生成。

  • kwargs – 要包括的额外参数。

返回:

authorization_url, state

property authorized

布尔值,指示此会话是否具有 OAuth 令牌。如果 self.authorized 为 True,则可以合理地期望对资源的 OAuth 受保护请求成功。如果 self.authorized 为 False,则需要用户通过 OAuth 身份验证流程,然后对资源的 OAuth 受保护请求才能成功。

fetch_token(token_url, code=None, authorization_response=None, body='', auth=None, username=None, password=None, method='POST', force_querystring=False, timeout=None, headers=None, verify=None, proxies=None, include_client_id=None, client_secret=None, cert=None, **kwargs)

从令牌端点获取访问令牌的通用方法。

如果您使用 MobileApplicationClient,您将希望使用 token_from_fragment 而不是 fetch_token

当前实现强制执行 RFC 指南。

参数:
  • token_url – 令牌端点 URL,必须使用 HTTPS。

  • code – 授权代码(由 WebApplicationClients 使用)。

  • authorization_response – 授权响应 URL,请求返回给您的回调 URL。由 WebApplicationClients 使用,而不是代码。

  • body – 可选的 application/x-www-form-urlencoded 正文,以将其添加到令牌请求中。优先使用 kwargs 而非正文。

  • authrequests 接受的 auth 元组或方法。

  • username – LegacyApplicationClients 要求在请求正文中出现的用户名。

  • 密码 – LegacyApplicationClients 要求在请求正文中出现的密码。

  • 方法 – 用于发出请求的 HTTP 方法。默认为 POST,但也可以是 GET。应根据需要添加其他方法。

  • 强制查询字符串 – 如果为 True,则强制将请求正文发送到查询字符串中。

  • 超时 – 请求超时(以秒为单位)。

  • 标头 – 使用其作为默认请求标头的字典。

  • 验证 – 验证 SSL 证书。

  • 代理代理 参数传递给 请求

  • 包含客户端 ID – 请求正文是否应包含 客户端 ID 参数。默认值为 ,它将尝试自动检测。这可以强制始终包含 (True) 或从不包含 (False)。

  • 客户端密钥 – 与 客户端 ID 配对的 客户端密钥。通常需要此项,除非在 auth 元组中提供了此项。如果该值为 ,则它将从请求中省略,但是如果该值为空字符串,则将发送一个空字符串。

  • 证书 – 用于 OAuth 2.0 互 TLS 客户端身份验证 (draft-ietf-oauth-mtls) 的客户端证书。可以是包含私钥和证书的文件的路径,也可以是证书和密钥的两个文件名组成的元组。

  • 关键字参数 – 要包含在令牌请求中的额外参数。

返回:

令牌字典

new_state()

生成用于授权的状态字符串。

refresh_token(token_url, refresh_token=, body='', auth=, timeout=, headers=, verify=, proxies=, **kwargs)

使用刷新令牌获取新的访问令牌。

参数:
  • 令牌 URL – 令牌端点,必须是 HTTPS。

  • 刷新令牌 – 要使用的刷新令牌。

  • body – 可选的 application/x-www-form-urlencoded 正文,以将其添加到令牌请求中。优先使用 kwargs 而非正文。

  • authrequests 接受的 auth 元组或方法。

  • 超时 – 请求超时(以秒为单位)。

  • 标头请求 要使用的标头字典。

  • 验证 – 验证 SSL 证书。

  • 代理代理 参数将传递给 请求

  • 关键字参数 – 要包含在令牌请求中的额外参数。

返回:

令牌字典

register_compliance_hook(hook_type, hook)

注册用于请求/响应调整的挂钩。

可用的挂钩有

access_token_response 在令牌解析之前调用。refresh_token_response 在刷新令牌解析之前调用。protected_request 在发出请求之前调用。access_token_request 在发出令牌获取请求之前调用。refresh_token_request 在发出刷新请求之前调用。

如果您发现需要新的挂钩,请发送 GitHub PR 请求或打开一个问题。

请求(方法, 网址, 数据=, 标题=, 扣留令牌=错误, 客户端 ID=, 客户端密钥=, 文件=, **关键字参数)

拦截所有请求,并在存在时添加 OAuth 2 令牌。

属性 范围

默认情况下,使用客户端的范围,除非被覆盖

片段令牌(授权响应)

从 URI 片段中解析令牌,由 MobileApplicationClients 使用。

参数:

授权响应 – 重定向回您的完整 URL

返回:

令牌字典