八、密码模式

最后更新于:2022-04-01 03:10:59

密码模式(Resource Owner Password Credentials Grant)中,用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。 在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码。这通常用在用户对客户端高度信任的情况下,比如客户端是操作系统的一部分,或者由一个著名公司出品。而认证服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式。 ![密码模式](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-09-11_55f28853348d1.png) 它的步骤如下: > (A)用户向客户端提供用户名和密码。 > > (B)客户端将用户名和密码发给认证服务器,向后者请求令牌。 > > (C)认证服务器确认无误后,向客户端提供访问令牌。 B步骤中,客户端发出的HTTP请求,包含以下参数: * grant_type:表示授权类型,此处的值固定为"password",必选项。 * username:表示用户名,必选项。 * password:表示用户的密码,必选项。 * scope:表示权限范围,可选项。 下面是一个例子。 > ~~~ > POST /token HTTP/1.1 > Host: server.example.com > Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW > Content-Type: application/x-www-form-urlencoded > > grant_type=password&username=johndoe&password=A3ddj3w > ~~~ C步骤中,认证服务器向客户端发送访问令牌,下面是一个例子。 > ~~~ > HTTP/1.1 200 OK > Content-Type: application/json;charset=UTF-8 > Cache-Control: no-store > Pragma: no-cache > > { > "access_token":"2YotnFZFEjr1zCsicMWpAA", > "token_type":"example", > "expires_in":3600, > "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA", > "example_parameter":"example_value" > } > ~~~ 上面代码中,各个参数的含义参见《授权码模式》一节。 整个过程中,客户端不得保存用户的密码。
';