简介
: 用户向客户端提供用户名和密码,客户端使用这些信息(不得存储密码)去获取授权。通常用在用户对客户端高度信任的情况下,且认证服务器在其他授权模式无法使用的情况下才考虑使用这种模式。
+----------+
| Resource |
| Owner |
| |
+----------+
v
| Resource Owner
(A) Password Credentials
|
v
+---------+ +---------------+
| |>--(B)---- Resource Owner ------->| |
| | Password Credentials | Authorization |
| Client | | Server |
| |<--(C)---- Access Token ---------<| |
| | (w/ Optional Refresh Token) | |
+---------+ +---------------+
(A) 客户端将用户导向认证服务器
(B) 用户决定是否基于客户端授权
(C) 假设用户给予授权,认证服务器将用户导向客户端事先指定的“重定向URI”(redirection URI),并在URI的Hash部分包含了访问令牌
(D) 浏览器向资源服务器发出请求,其中不包括上一步收到的Hash值
(E) 资源服务器返回一个网页,其中包含的代码可以获取Hash值中的令牌
(F) 浏览器执行上一步获得的脚本,提取出令牌
(G) 浏览器将令牌发给客户端
(Access Token Request)B步骤中客户端将用户名和密码发给认证服务器,向后者请求令牌,Content-Type为application/x-www-form-urlencoded,包含以下参数:
-- 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
-- access_token: 必填,访问令牌
-- token_type: 必填,令牌类型,可以是 bearer 类型或 mac 类型
-- expires_in: 必填,标识过期时间(单位秒),如果不填需用其它方式标识过期时间
-- refresh_token: 选填,更新令牌,用来获取下一令牌
-- example_parameter: 选填,示例额外信息
-- scope: 选填,权限范围,与客户端申请的一致
示例
:
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"
}