开发者界面
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
接口访问受保护的资源。oauthlib.oauth2.WebApplicationClient
(默认):授权码授权
请注意,您将从 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 而非正文。
auth – requests 接受的 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 而非正文。
auth – requests 接受的 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
- 返回:
令牌字典