请求验证器

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_challengecode_challenge_method 值与授权码一起使用,以便以后可以验证。

通常, code_challengecode_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

一定要回来 plainS256 。如果您已经实现了自己的值,则可以返回自定义值 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 ClaimsJWT 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!

两种不同的作用域验证方法:

  1. 所有(范围)。必须授权令牌访问所有作用域

    与资源关联。例如,令牌可以访问 read-onlyimages ,因此客户端可以查看图像,但不能上传新的。允许通过组合各种作用域进行细粒度访问控制。

  2. 任何(示波器)。令牌必须被授权访问其中一个

    与资源关联的作用域。例如,令牌可以访问 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

方法由以下人员使用:
  • 资源所有者密码凭据授予