资源所有者密码凭据授予

class oauthlib.oauth2.ResourceOwnerPasswordCredentialsGrant(request_validator=None, **kwargs)[源代码]

Resource Owner Password Credentials Grant

资源所有者密码凭据授予类型适用于资源所有者与客户端具有信任关系的情况,例如设备操作系统或高特权应用程序。授权服务器在启用此授权类型时应特别小心,并仅在其他流不可行时才允许它。

此授权类型适用于能够获取资源所有者凭据(用户名和密码,通常使用交互表单)的客户端。它还用于将存储的凭据转换为访问令牌,从而将使用直接身份验证方案(如HTTP基本身份验证或摘要身份验证)的现有客户端迁移到OAuth:

+----------+
| Resource |
|  Owner   |
|          |
+----------+
     v
     |    Resource Owner
    (A) Password Credentials
     |
     v
+---------+                                  +---------------+
|         |>--(B)---- Resource Owner ------->|               |
|         |         Password Credentials     | Authorization |
| Client  |                                  |     Server    |
|         |<--(C)---- Access Token ---------<|               |
|         |    (w/ Optional Refresh Token)   |               |
+---------+                                  +---------------+

图5:资源所有者密码凭据流

图5所示的流程包括以下步骤:

  1. 资源所有者向客户端提供其用户名和

    密码。

  2. 客户端向授权请求访问令牌

    通过包括从资源所有者接收的凭据来获取服务器的令牌终结点。发出请求时,客户端向授权服务器进行身份验证。

  3. 授权服务器对客户端进行身份验证并验证

    资源所有者凭据,如果有效,则颁发访问令牌。

add_token(token, token_handler, request)
参数:
  • token --

  • token_handler -- 令牌处理程序实例,例如oauthlib.oauth2.BearerToken类型。

  • request (oauthlib.common.Request) -- OAuthlib请求。

create_authorization_response(request, token_handler)
参数:
  • request (oauthlib.common.Request) -- OAuthlib请求。

  • token_handler -- 令牌处理程序实例,例如oauthlib.oauth2.BearerToken类型。

create_token_response(request, token_handler)[源代码]

返回json格式的Token或错误。

参数:
  • request (oauthlib.common.Request) -- OAuthlib请求。

  • token_handler -- 令牌处理程序实例,例如oauthlib.oauth2.BearerToken类型。

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

prepare_authorization_response(request, token, headers, body, status)

根据响应模式放置令牌。

基类可以为其授权响应定义默认响应模式,方法是重写 default_response_mode 成员。

参数:
  • request (oauthlib.common.Request) -- OAuthlib请求。

  • token --

  • headers --

  • body --

  • status --

validate_grant_type(request)
参数:

request (oauthlib.common.Request) -- OAuthlib请求。

validate_scopes(request)
参数:

request (oauthlib.common.Request) -- OAuthlib请求。

validate_token_request(request)[源代码]
参数:

request (oauthlib.common.Request) -- OAuthlib请求。

客户端向令牌端点发出请求,方法是根据附录B,在HTTP请求实体主体中使用字符编码为UTF-8的“APPLICATION/x-www-form-urlencode”格式添加以下参数:

grant_type

必填。值必须设置为“Password”。

用户名

必填。资源所有者用户名。

口令

必填。资源所有者密码。

作用域

可选。访问请求的范围,如 Section 3.3

如果客户端类型为机密,或者向客户端颁发了客户端凭据(或分配了其他身份验证要求),则客户端必须向授权服务器进行身份验证,如中所述 Section 3.2.1

授权服务器必须:

O要求对机密客户端或任何

获得客户端凭据(或具有其他身份验证要求)的客户端,

O如果包括客户端身份验证,则对客户端进行身份验证

O使用其验证资源所有者密码凭据

现有密码验证算法。

由于此访问令牌请求使用资源所有者的密码,因此授权服务器必须保护端点免受暴力攻击(例如,使用速率限制或生成警报)。