上一篇JSON基础与Restful风格接口我们详细讲了JSON基础知识,Restful特性以及由于Restful的无状态性导致认证非常的重要,以及讲了OAuth2.0协议的模型和理解,今天我们讲讲具体的授权码模式详细流程,更好的理解OAuth2.0
授权码模式流程
对于同在UAA-server管理下的client们
- 用户访问某个客户端,客户端跳转到认证中心(UAA)
- 若用户已经登录过,选择是否授权,若未登录过,登录,再进行授权
- 假设用户给了授权,认证服务器将用户导向客户端事先指定的URL,并附上一个授权码
code
- 客户端收到授权码,附上重定向的授权码code,redirect_uri,clientID,grant_type四个参数向UA申请token,这一步是客户端后台完成的,对用户不可见
- 认证服务器核对之后,返回access token和refresh token等
步骤详情
- 客户端申请认证的URL 参数:
- response_type:表示授权类型,必选项,此处的值固定为"code"
- client_id:表示客户端的ID,必选项。(如微信授权登录,此ID是APPID)
- redirect_uri:表示重定向URI,可选项
- scope:表示申请的权限范围,可选项
- state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值
GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz
&redirect_uri=https://client.example.com/cb HTTP/1.1
HTTP/1.1 Host: server.example.com
- 认证服务器返回
- code:表示授权码,必选项。该码的有效期应该很短,通常设为10分钟,客户端只能使用该码一次,否则会被授权服务器拒绝。该码与客户端ID和重定向URI,是一一对应关系。
- state:如果客户端的请求中包含这个参数,认证服务器的回应也必须一模一样包含这个参数。
HTTP/1.1 302 Found
Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA
&state=xyz
- 申请token
- grant_type:表示使用的授权模式,必选项,此处的值固定为"authorization_code"。
- code:表示上一步获得的授权码,必选项。
- redirect_uri:表示重定向URI,必选项,且必须与A步骤中的该参数值保持一致。
- client_id:表示客户端ID,必选项。
请求头headers
Authorization -> Basic aW50ZXJuZXRfcGx1czppbnRlcm5ldF9wbHVz 。注意是Basic 开头然后是clientid:clientScret 格式进行base64加密后的字符串。
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https://client.example.com/cb
服务端的返回
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"
}
于是就可以带着token去访问API了
更新令牌
如果使用的时候发现令牌过期了
客户端发出更新令牌的HTTP请求,包含以下参数:
- granttype:表示使用的授权模式,此处的值固定为"refreshtoken",必选项。
- refresh_token:表示早前收到的更新令牌,必选项。
- scope:表示申请的授权范围,不可以超出上一次申请的范围,如果省略该参数,则表示与上一次一致。
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA
大致流程就结束了,下一篇文章将实际操作微信OAuth2.0实际操作.进一步加深理解.