基本客户端

class oauthlib.oauth2.Client(client_id, default_token_placement='auth_header', token_type='Bearer', access_token=None, refresh_token=None, mac_key=None, mac_algorithm=None, token=None, scope=None, state=None, redirect_url=None, state_generator=<function generate_token>, code_verifier=None, code_challenge=None, code_challenge_method=None, **kwargs)[源代码]

负责访问令牌管理的基本OAuth2客户端。

此类还充当泛型接口,提供所有客户端类型通用的方法,例如 prepare_authorization_requestprepare_token_revocation_request 。这个 prepare_x_request 方法是推荐的与客户端交互的方式(与抽象的准备URI/Body/ETC方法相反)。推荐使用它们,因为它们更易于使用(更一致),并添加了一些额外的安全检查,如HTTPS和状态检查。

其中一些方法只需要由特定目的的客户端提供的进一步实现,例如 oauthlib.oauth2.MobileApplicationClient 因此,您应该始终寻求使用与您需要的OAuth工作流匹配的客户端类。对于Python,这通常是 oauthlib.oauth2.WebApplicationClient

add_token(uri, http_method='GET', body=None, headers=None, token_placement=None, **kwargs)[源代码]

将令牌添加到请求URI、正文或授权头。

访问令牌类型为客户端提供成功利用访问令牌发出受保护资源请求所需的信息(以及特定于类型的属性)。如果客户端不了解令牌类型,则不得使用访问令牌。

例如,中定义的“承载”标记类型 [I-D.ietf-oauth-v2-bearer] 只需将访问令牌字符串包括在请求中即可使用:

GET /resource/1 HTTP/1.1
Host: example.com
Authorization: Bearer mF_9.B5f-4.1JqM

中定义的“mac”令牌类型 [I-D.ietf-oauth-v2-http-mac] 通过发布MAC密钥和访问令牌来使用,访问令牌用于对HTTP请求的某些组件进行签名:

GET /resource/1 HTTP/1.1
Host: example.com
Authorization: MAC id="h480djs93hd8",
                    nonce="274312:dj83hs9s",
                    mac="kDZvddkndxvhGRXZhvuDjEWhGeE="
create_code_challenge(code_verifier, code_challenge_method=None)[源代码]

创建PKCE code_challenge 派生自 code_verifier 。看见 RFC7636 Section 4.2

参数:
  • code_verifier -- 必填。这个 code_verifier 生成自 create_code_verifier()

  • code_challenge_method -- 可选。用于派生 code_challenge 。可接受的值包括 S256 。缺省值为 plain 。然后,客户端通过在代码验证器上使用以下转换之一来创建从代码验证器派生的代码质询::Plain CODE_CHANGLISH=CODE_VERIMIER S256 CODE_CHANGLISH=BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))(如果客户端能够使用 S256 ,它必须使用 S256 ,AS S256 必须在服务器上实施(MTI)。允许客户使用 plain 仅当他们不能支持 S256 出于某些技术原因,并且通过带外配置了解服务器支持 plain 。普通转换是为了与现有部署和不能使用S256转换的受限环境兼容。

create_code_verifier(length)[源代码]

创建PKCE code_verifier 用于计算 code_challenge 。看见 RFC7636 Section 4.1

参数:

length -- 必填。代码验证器的长度。

客户端首先为每个OAuth 2.0创建一个代码验证器“code_verier [RFC6749] 授权请求,方式如下:

code_verifier = high-entropy cryptographic random STRING using the
unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~"
from Section 2.3 of [RFC3986], with a minimum length of 43 characters
and a maximum length of 128 characters.
parse_request_body_response(body, scope=None, **kwargs)[源代码]

解析JSON响应正文。

如果访问令牌请求有效且已授权,则授权服务器将发布访问令牌,如中所述 Section 5.1 。不应包括刷新令牌。如果请求未通过客户端身份验证或无效,授权服务器将返回错误响应,如中所述 Section 5.2

参数:
  • body -- 令牌请求的响应正文。

  • scope -- 最初请求的作用域。如果没有提供,则使用构造函数中提供的那些。

返回:

令牌参数字典。

加薪:

如果范围已更改,则发出警告。 oauthlib.oauth2.errors.OAuth2Error 如果响应无效。

这些响应是JSON编码的,无需OAuthLib的帮助即可轻松解析。然而,关于答复,有几个微妙的问题需要注意,通过提出各种错误可以帮助解决这些问题。

成功的响应应始终包含

access_token

授权服务器颁发的访问令牌。通常是随机字符串。

token_type

如中所述颁发的令牌的类型 Section 7.1 。通常 Bearer

虽然不是强制的,但建议提供程序包括

expires_in

访问令牌的生存期(秒)。例如,值“3600”表示访问令牌将在生成响应的一小时后过期。如果省略,授权服务器应通过其他方式提供过期时间或记录缺省值。

scope

提供商可以在所有响应中提供此信息,但仅当其在授权请求后发生更改时才被要求提供。

parse_request_uri_response(*args, **kwargs)[源代码]

用于解析重定向响应的抽象方法。

populate_code_attributes(response)[源代码]

将授权码响应中的属性添加到自身。

populate_token_attributes(response)[源代码]

将令牌交换响应中的属性添加到自身。

prepare_authorization_request(authorization_url, state=None, redirect_url=None, scope=None, **kwargs)[源代码]

准备授权请求。

这是许多OAuth流程中的第一步,在这些流程中,用户被重定向到某个授权URL。此方法将所需参数添加到授权URL。

参数:
  • authorization_url -- 提供程序授权终结点URL。

  • state -- CSRF保护字符串。如果未提供,将自动创建。生成的状态可通过 state 属性。客户端应验证授权响应中的状态未更改且存在。如果使用 authorization_response 参数为 prepare_token_request

  • redirect_url -- 重定向用户在授权后将返回到的URL。必须提供,除非之前与提供商进行了设置。如果提供,则还必须在令牌请求中提供。

  • scope -- 要请求的作用域列表。必须等于或等于获取刷新令牌时授予的作用域的子集。如果没有提供,则使用构造函数中提供的那些。

  • kwargs -- 要包括在请求中的其他参数。

返回:

准备好的请求元组(url,Header,Body)。

prepare_refresh_body(body='', refresh_token=None, scope=None, **kwargs)[源代码]

使用刷新令牌准备访问令牌请求。

如果授权服务器向客户端发布了刷新令牌,则客户端通过使用添加以下参数向令牌端点发出刷新请求 application/x-www-form-urlencoded HTTP请求实体正文中的格式:

参数:
  • refresh_token -- 必填。颁发给客户端的刷新令牌。

  • scope -- 可选。第3.3节所述的访问请求的范围。请求的作用域不得包括任何最初不是由资源所有者授予的作用域,如果省略,则被视为等于资源所有者最初授予的作用域。请注意,如果没有提供,则使用构造函数中提供的参数(如果有的话)。

prepare_refresh_token_request(token_url, refresh_token=None, body='', scope=None, **kwargs)[源代码]

准备访问令牌刷新请求。

如果客户端获得了刷新令牌,则可以用新的访问令牌替换过期的访问令牌,而无需通过OAuth舞蹈。该刷新令牌和认证凭证可用于获得新的访问令牌,并且可能获得新的刷新令牌。

参数:
  • token_url -- 提供程序令牌刷新终结点URL。

  • refresh_token -- 刷新令牌字符串。

  • body -- 要向其中嵌入参数的现有请求正文(URL编码字符串)。这可能包含额外的参数。默认为‘’。

  • scope -- 要请求的作用域列表。必须等于或等于获取刷新令牌时授予的作用域的子集。如果没有提供,则使用构造函数中提供的那些。

  • kwargs -- 要包括在请求中的其他参数。

返回:

准备好的请求元组(url,Header,Body)。

prepare_request_body(*args, **kwargs)[源代码]

用于创建请求正文的抽象方法。

prepare_request_uri(*args, **kwargs)[源代码]

用于创建请求URI的抽象方法。

prepare_token_request(token_url, authorization_response=None, redirect_url=None, state=None, body='', **kwargs)[源代码]

准备令牌创建请求。

请注意,这些请求通常需要客户端身份验证,方法是包括CLIENT_ID或一组特定于提供者的身份验证凭据。

参数:
  • token_url -- 提供程序令牌创建终结点URL。

  • authorization_response -- 完整的重定向URL字符串,即用户在成功授权后被重定向到的位置。用于挖掘在此步骤中获取令牌所需的凭据,例如授权码。

  • redirect_url -- 随授权请求提供的reDirect_url(如果有)。

  • state --

  • body -- 要向其中嵌入参数的现有请求正文(URL编码字符串)。这可能包含额外的参数。默认为‘’。

  • kwargs -- 要包括在请求中的其他参数。

返回:

准备好的请求元组(url,Header,Body)。

prepare_token_revocation_request(revocation_url, token, token_type_hint='access_token', body='', callback=None, **kwargs)[源代码]

准备令牌吊销请求。

参数:
  • revocation_url -- 提供程序令牌吊销终结点URL。

  • token -- 要撤消的访问或刷新令牌(字符串)。

  • token_type_hint -- "access_token" (默认)或 "refresh_token" 。这是可选的,如果您不想通过,您必须提供 token_type_hint=None

  • body --

  • callback -- JSONP回调,如 package.callback 在接收到响应时被调用。并不是说它不应该包括()后缀。

  • kwargs -- 要包括在请求中的其他参数。

返回:

准备好的请求元组(url,Header,Body)。

请注意,JSONP请求可以使用GET请求,因为参数将被添加到请求URL查询,而不是请求正文。

撤销请求的一个示例

POST /revoke HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW

token=45ghiukldjahdnhzdauz&token_type_hint=refresh_token

JSONP撤销请求的一个示例

GET /revoke?token=agabcdefddddafdd&callback=package.myCallback HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW

和错误响应

package.myCallback({"error":"unsupported_token_type"});

请注意,这些请求通常需要客户端凭据,在公共客户端的情况下为Client_id,对于机密客户端,则需要特定于提供者的身份验证凭据。

property token_types

支持的令牌类型及其各自的方法

可以通过扩展此词典来支持其他标记。

持有者令牌规范是稳定和安全的使用。

MAC令牌规范还不稳定,对MAC令牌的支持还处于实验阶段,目前与该规范的版本00匹配。