请求验证器
- class oauthlib.oauth2.RequestValidator[源代码]
- authenticate_client(request, *args, **kwargs)[源代码]
通过OAuth 2规范之外的方式对客户端进行身份验证。
身份验证的方式是预先协商的,并且例如可以 HTTP Basic Authentication Scheme 其利用授权报头。
Header可以通过请求来访问,Body和Query中的Header和参数都可以通过直接属性访问来获取,即URL查询中的Client_id对应的quest.client_id。
身份验证过程需要包含客户端的标识(即,基于客户端ID搜索数据库)。如果根据接收到的客户端id,客户端不存在,则此方法必须返回FALSE,库创建的HTTP响应将包含‘INVALID_CLIENT’消息。
在客户端识别成功后,此方法需要设置请求上的客户端,即quest.client=Client。客户端对象的类必须包含‘CLIENT_ID’属性,并且‘CLIENT_ID’必须具有值。
- 参数:
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法由以下人员使用:
授权码授予
资源所有者密码凭据授予(可能被禁用)
客户端凭据授予
刷新令牌授予
- authenticate_client_id(client_id, request, *args, **kwargs)[源代码]
确保客户端ID属于非机密客户端。
非机密客户端是指不需要通过其他方式进行身份验证的客户端,例如使用HTTP Basic。
注意,虽然不是绝对必要的,但通常可以非常方便地将quest.client设置为与给定的Client_id相关联的客户端对象。
- 参数:
client_id -- Unicode客户端标识符。
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法由以下人员使用:
授权码授予
- client_authentication_required(request, *args, **kwargs)[源代码]
确定当前请求是否需要客户端身份验证。
- 根据RFC6749,在以下情况下需要客户端身份验证:
资源所有者密码凭据授予,当客户端类型为机密时,或当向客户端颁发客户端凭据时,或每当客户端提供客户端身份验证时,请参见 Section 4.3.2 。
授权码授予,当客户端类型为机密时,或当客户端获得客户端凭据时,或每当客户端提供客户端身份验证时,请参见 Section 4.1.3 。
当客户端类型为机密时、客户端获得客户端凭据时或客户端提供客户端身份验证时,刷新令牌授予,请参见 Section 6
- 参数:
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法由以下人员使用:
授权码授予
资源所有者密码凭据授予
刷新令牌授予
- confirm_redirect_uri(client_id, code, redirect_uri, client, request, *args, **kwargs)[源代码]
确保此授权码表示的授权过程以此‘reDirect_uri’开始。
根据RFC 6749第4.1.3节的规定,如果客户端在获取代码时指定了reDirect_uri,则该重定向URI必须绑定到代码,并在此方法中验证是否相等。不要与客户端允许的重定向URI进行比较,而是与保存代码时使用的URI进行比较。
- 参数:
client_id -- Unicode客户端标识符。
code -- Unicode AUTORIZATION_CODE。
redirect_uri -- Unicode绝对URI。
client -- 由您设置的客户端对象,请参见
.authenticate_client
。request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法由以下人员使用:
授权码授予(在令牌请求期间)
- get_code_challenge(code, request)[源代码]
对于每个“令牌”请求都会调用。
当服务器在授权响应中发出授权码时,它必须将
code_challenge
和code_challenge_method
值与授权码一起使用,以便以后可以验证。通常,
code_challenge
和code_challenge_method
值以加密形式存储在code
但是可替换地可以存储在与该代码相关联的服务器上。服务器不能包含code_challenge
其他实体可以提取的形式的客户端请求中的值。返回
code_challenge
与代码关联。如果None
则认为代码不与任何质询相关联。- 参数:
code -- 授权码。
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
code_challenge string
- 方法由以下人员使用:
授权码授予-当PKCE处于活动状态时
- get_code_challenge_method(code, request)[源代码]
在“令牌”请求处理期间调用,当
code_verifier
以及一个code_challenge
已经提供了。看见
.get_code_challenge
。一定要回来
plain
或S256
。如果您已经实现了自己的值,则可以返回自定义值AuthorizationCodeGrant
班级。- 参数:
code -- 授权码。
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
code_challenge_method string
- 方法由以下人员使用:
授权码授予-当PKCE处于活动状态时
- get_default_redirect_uri(client_id, request, *args, **kwargs)[源代码]
获取客户端的默认重定向URI。
- 参数:
client_id -- Unicode客户端标识符。
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
The default redirect URI for the client
- 方法由以下人员使用:
授权码授予
隐含赠与
- get_default_scopes(client_id, request, *args, **kwargs)[源代码]
获取客户端的默认作用域。
- 参数:
client_id -- Unicode客户端标识符。
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
List of default scopes
- 方法被所有核心授权类型使用:
授权码授予
隐含赠与
资源所有者密码凭据授予
客户端凭据授予
- get_original_scopes(refresh_token, request, *args, **kwargs)[源代码]
获取与刷新令牌关联的作用域列表。
- 参数:
refresh_token -- Unicode刷新令牌。
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
List of scopes.
- 方法由以下人员使用:
刷新令牌授权
- introspect_token(token, token_type_hint, request, *args, **kwargs)[源代码]
自省访问或刷新令牌。
在内省请求验证后调用。此方法应验证 token 并返回包含相关索赔列表的词典,或者 None 以防令牌未知。
以下是您应该感兴趣的已登记索赔清单:
作用域:空格分隔的作用域列表
Client_id:客户端标识
UserName:资源所有者的人类可读标识符
TOKEN_TYPE:令牌类型
EXP:指示此内标识何时到期的整数时间戳
IAT:整数时间戳,指示该令牌的发布时间
NBF:整数时间戳,指示何时可以使用它
SUB:令牌的主题-资源所有者的标识符
AUD:表示目标受众的字符串标识符列表
ISS:表示该令牌的颁发者的字符串
Jti:令牌的字符串标识符
请注意,它们中的大多数都直接来自JWT RFC。更多详细信息,请参阅 Introspect Claims 或 JWT Claims 。
该实现可以使用 token_type_hint 以提高查找效率,但必须回退到其他类型以符合RFC。
在此方法之后,将Claims的字典添加到quest.Token。
- 参数:
token -- 令牌字符串。
token_type_hint -- 访问令牌或刷新令牌。
request (oauthlib.common.Request) -- OAuthlib请求。
- 方法由以下人员使用:
自省终结点(所有授权都兼容)
- invalidate_authorization_code(client_id, code, request, *args, **kwargs)[源代码]
使用后使授权码无效。
- 参数:
client_id -- Unicode客户端标识符。
code -- 授权码授予(quest.code)。
request (oauthlib.common.Request) -- OAuthlib请求。
- 方法由以下人员使用:
授权码授予
- is_origin_allowed(client_id, origin, request, *args, **kwargs)[源代码]
指示是否允许给定源通过跨域资源共享(CORS)访问令牌终结点。基于浏览器的客户端(如单页应用程序)使用CORS来执行授权码授予。
(注:如果通过浏览器等公共客户端执行授权码授予,也应使用PKCE。)
如果此方法返回TRUE,则相应的CORS标头将添加到响应中。默认情况下,此方法始终返回FALSE,这意味着CORS处于禁用状态。
- 参数:
client_id -- Unicode客户端标识符。
redirect_uri -- Unicode起源。
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
bool
- 方法由以下人员使用:
授权码授予
刷新令牌授予
- is_pkce_required(client_id, request)[源代码]
确定当前请求是否需要PKCE。默认值为FALSE。这对于“授权”和“令牌”请求都是被调用的。
通过以下方式重写此方法
return True
为每个人启用PKCE。您可能只想为公共客户端启用它。请注意,除了客户端身份验证之外,还可以使用PKCE。使用授权码授权的OAuth 2.0公共客户端容易受到授权码拦截攻击。本规范描述了攻击以及通过使用代码交换证明密钥(PKCE,发音为“Pixy”)来缓解威胁的技术。看见 RFC7636 。
- 参数:
client_id -- 客户端标识符。
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法由以下人员使用:
授权码授予
- is_within_original_scope(request_scopes, refresh_token, request, *args, **kwargs)[源代码]
检查请求的作用域是否在刷新令牌的作用域内。
刷新访问令牌时,新令牌的作用域需要在原始令牌的作用域内。这是通过检查所有请求的作用域字符串是否都在Get_Original_Scope返回的列表上来确保的。如果此检查失败,则调用IS_WITHING_ORIGNAL_SCOPE。该方法可用于从Get_Original_Scope返回所有有效作用域不切实际的情况。
- 参数:
request_scopes -- 客户端请求的作用域的列表。
refresh_token -- Unicode刷新_令牌。
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法由以下人员使用:
刷新令牌授权
- revoke_token(token, token_type_hint, request, *args, **kwargs)[源代码]
撤销访问令牌或刷新令牌。
- 参数:
token -- 令牌字符串。
token_type_hint -- 访问令牌或刷新令牌。
request (oauthlib.common.Request) -- OAuthlib请求。
- 方法由以下人员使用:
撤销终结点
- rotate_refresh_token(request)[源代码]
确定是否轮换刷新令牌。默认情况下,是的。
当访问令牌被刷新时,旧的刷新令牌可以被保留或替换为新的(轮换的)令牌。返回True以旋转,返回False以保持原始。
- 参数:
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法由以下人员使用:
刷新令牌授予
- save_authorization_code(client_id, code, request, *args, **kwargs)[源代码]
持久保存AUTHORIZATION_CODE。
- 代码应至少与以下内容一起存储:
客户端ID (
client_id
)使用的重定向URI (
request.redirect_uri
)资源所有者/用户 (
request.user
)授权范围 (
request.scopes
)
- 要支持PKCE,您必须将代码与以下各项相关联:
代码挑战 (
request.code_challenge
)和代码挑战法 (
request.code_challenge_method
)
- 要支持OIDC,您必须将代码与以下各项关联:
随机数(如果存在) (
code["nonce"]
)
这个
code
参数实际上是一个词典,它至少包含一个code
具有实际授权码的密钥:{'code': 'sdf345jsdf0934f'}
它还可能有一个
claims
参数,该参数在出现时将是从JSON反序列化的字典,如http://openid.net/specs/openid-connect-core-1_0.html#ClaimsParameter中所述。该值应保存在此方法中,并在.validate_code
。- 参数:
client_id -- Unicode客户端标识符。
code -- 授权码授予的判定,以及可选的状态。
request (oauthlib.common.Request) -- OAuthlib请求。
- 方法由以下人员使用:
授权码授予
- save_bearer_token(token, request, *args, **kwargs)[源代码]
持久化持有者令牌。
- 持有者令牌应至少与以下各项相关联:
客户端及其客户端ID(如果可用)
资源所有者/用户(quest.user)
授权作用域(quest.scope)
过期时间
刷新令牌(如果已颁发)
索赔文档(如果存在于请求中)。索赔
持有者令牌词典可能包含多个项目::
{ 'token_type': 'Bearer', 'access_token': 'askfjh234as9sd8', 'expires_in': 3600, 'scope': 'string of space separated authorized scopes', 'refresh_token': '23sdf876234', # if issued 'state': 'given_by_client', # if supplied by client (implicit ONLY) }
请注意,虽然“Scope”是一个由字符串分隔的授权作用域列表,但原始列表仍然可以在quest.scope中使用。
令牌词典作为引用传递,因此对词典所做的任何更改都将返回给用户。如果其他信息必须返回给客户端用户,并且只有在将令牌写入存储后才能获得该信息,则应将其添加到令牌字典中。如果必须修改令牌字典,但更改不应返回给用户,则必须在进行更改之前创建字典的副本。
另请注意,如果授权代码授予请求包含有效的Claims参数(用于OpenID Connect),则quest.Claims属性将包含Claims dict,它应该被保存以供以后在生成id_Token和/或UserInfo响应内容时使用。
- 参数:
token -- 不记名代币辞典。
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
The default redirect URI for the client
- 方法由颁发持有者令牌的所有核心授权类型使用:
授权码授予
隐含赠与
授予资源所有者密码凭据(可能不关联客户端)
客户端凭据授予
- save_token(token, request, *args, **kwargs)[源代码]
使用特定于令牌类型的方法持久化令牌。
目前仅支持SAVE_BEARER_TOKEN。
- 参数:
token -- (持有者)象征性的奖章。
request (oauthlib.common.Request) -- OAuthlib请求。
- validate_bearer_token(token, scopes, request)[源代码]
确保持有者令牌有效并且有权访问作用域。
- 参数:
token -- 一串随机字符。
scopes -- 与受保护资源关联的作用域列表。
request (oauthlib.common.Request) -- OAuthlib请求。
OAuth 2安全性和限制泄漏令牌的影响的关键是令牌的短到期时间, always ensure the token has not expired! 。
两种不同的作用域验证方法:
- 所有(范围)。必须授权令牌访问所有作用域
与资源关联。例如,令牌可以访问
read-only
和images
,因此客户端可以查看图像,但不能上传新的。允许通过组合各种作用域进行细粒度访问控制。
- 任何(示波器)。令牌必须被授权访问其中一个
与资源关联的作用域。例如,令牌可以访问
read-only-images
。允许细粒度的访问控制,尽管可以说不太方便。
使用作用域的一种强大方法是模拟UNIXACL,并将作用域视为具有特定特权的组。对于REST风格的API,这些可能映射到HTTP动词,而不是读、写和执行。
请注意,可以将quest.user属性设置为与该令牌相关联的资源所有者。类似地,可以将quest.client和quest.cope属性设置为关联的客户端对象和授权作用域。如果您随后使用为Django提供的修饰符,这些属性将在所有受保护的视图中作为关键字参数可用。
- 参数:
token -- Unicode承载令牌
scopes -- 作用域列表(由您定义)
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法被所有核心承载令牌颁发授权类型间接使用:
授权码授予
隐含赠与
资源所有者密码凭据授予
客户端凭据授予
- validate_client_id(client_id, request, *args, **kwargs)[源代码]
确保客户端ID属于有效且处于活动状态的客户端。
注意,虽然不是绝对必要的,但通常可以非常方便地将quest.client设置为与给定的Client_id相关联的客户端对象。
- 参数:
client_id -- Unicode客户端标识符。
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法由以下人员使用:
授权码授予
隐含赠与
- validate_code(client_id, code, client, request, *args, **kwargs)[源代码]
验证AUTHORIZATION_CODE是否有效并分配给给定的客户端。
在返回TRUE之前,请根据与代码一起存储在‘SAVE_AUTHORIZATION_CODE’中的信息设置以下内容:
request.user
request.scopes
Quest.Claims(如果已提供)
乳房!Quest.user属性应设置为与此授权码关联的资源所有者。同样,还必须设置quest.scope。
如果给定了quest.Claims属性,则应为其分配一个词典。
如果启用了PKCE(请参阅‘IS_PKCE_REQUIRED’和‘SAVE_AUTHORIZATION_CODE’),则必须根据存储的信息设置以下内容:
request.code_challenge
request.code_challenge_method
- 参数:
client_id -- Unicode客户端标识符。
code -- Unicode授权码。
client -- 由您设置的客户端对象,请参见
.authenticate_client
。request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法由以下人员使用:
授权码授予
- validate_grant_type(client_id, grant_type, client, request, *args, **kwargs)[源代码]
确保授权客户端使用请求的GRANT_TYPE。
- 参数:
client_id -- Unicode客户端标识符。
grant_type -- Unicode授权类型,即AUTHORIZATION_CODE、PASSWORD。
client -- 由您设置的客户端对象,请参见
.authenticate_client
。request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法由以下人员使用:
授权码授予
资源所有者密码凭据授予
客户端凭据授予
刷新令牌授予
- validate_redirect_uri(client_id, redirect_uri, request, *args, **kwargs)[源代码]
确保授权客户端重定向到请求的reDirect_uri。
所有客户端都应该注册它们打算重定向到的所有URI的绝对URI。注册不在oauthlib的范围内。
- 参数:
client_id -- Unicode客户端标识符。
redirect_uri -- Unicode绝对URI。
request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法由以下人员使用:
授权码授予
隐含赠与
- validate_refresh_token(refresh_token, client, request, *args, **kwargs)[源代码]
确保持有者令牌有效并且有权访问作用域。
乳房!Quest.user属性应设置为与此刷新令牌关联的资源所有者。
- 参数:
refresh_token -- Unicode刷新令牌。
client -- 由您设置的客户端对象,请参见
.authenticate_client
。request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法由以下人员使用:
授权码授予(通过颁发刷新令牌间接)
资源所有者密码凭据授予(也是间接授予)
刷新令牌授予
- validate_response_type(client_id, response_type, client, request, *args, **kwargs)[源代码]
确保授权客户端使用请求的RESPONSE_TYPE。
- 参数:
client_id -- Unicode客户端标识符。
response_type -- Unicode响应类型,即代码、令牌。
client -- 由您设置的客户端对象,请参见
.authenticate_client
。request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法由以下人员使用:
授权码授予
隐含赠与
- validate_scopes(client_id, scopes, client, request, *args, **kwargs)[源代码]
确保客户端有权访问请求的作用域。
- 参数:
client_id -- Unicode客户端标识符。
scopes -- 作用域列表(由您定义)。
client -- 由您设置的客户端对象,请参见
.authenticate_client
。request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法被所有核心授权类型使用:
授权码授予
隐含赠与
资源所有者密码凭据授予
客户端凭据授予
- validate_user(username, password, client, request, *args, **kwargs)[源代码]
确保用户名和密码有效。
乳房!验证还应将请求的用户属性设置为有效的资源所有者,即quest.user=用户名或类似属性。如果未设置,您将无法将令牌与使用的持久化方法(通常为SAVE_BEARER_TOKEN)中的用户关联。
- 参数:
username -- Unicode用户名。
password -- Unicode密码。
client -- 由您设置的客户端对象,请参见
.authenticate_client
。request (oauthlib.common.Request) -- OAuthlib请求。
- 返回类型:
True or False
- 方法由以下人员使用:
资源所有者密码凭据授予