[简易图解]『 OAuth2.0』 『进阶』 授权模式总结 转本站chihokyo 
                                                    
                        
                    
                    
  
                    
                    一,到底 OAuth 是什么?
写在前面的
上一次简单傻瓜式的用图来说明了到底什么是 OAuth,没看过的童靴可以点击下面这条链接看一下。
看完这个在来看这篇可能理解起来效果拔群。
【简易图解】『 OAuth2.0』 猴子都能懂的图解
简而言之就是一个程序想借用下你的数据 ( 想借你微信朋友圈内容看一下啦,想借你微博图片下载一下啦) 所产生的一系列问题 (比如安全,如何授权等等),OAuth 就是关于这些的规范。
- 接下来我想就授权模式做一下总结,还是用图。
- 这次的图可能没有上次这么傻瓜,只要仔细阅读一下,就连我非计算机专业出身的人都能懂的话,一般的猴子们估计也没问题。觉得太长的可以只从图解看起,或者只看授权码模式就好。
- 授权模式主要参考来自 RFC 6749
认证 Authentication VS 授权 Authorization
看授权模式图之前,先区别下这两个概念。
- 认证就是我要输入帐号和密码来证明我是我 
- 授权就是并非通过帐号和密码来把我的东西借给其他人 
- 这其中的关键就是,是否需要输入帐号密码。记住,OAuth 不需要输入帐号和密码,你要做的只是授权。 
 下面这张图清晰的说明了,认证和授权。 - 二,授权模式- 如果有觉得画质太差的,没办法,上传之后就这样了。。 
 这里是 PPT 链接。
1. 授权码模式 Authorization Code
- 授权码模式是最常见常用的模式,我们所熟悉的微博,QQ 等都是这种模式。 
- 另外也是最繁琐的一种方式,如果弄懂了这个相信接下来的三种类型都会迎刃而解。 
- 这种模式和其他最大的区别就在于是否有 - 授权码这个步骤。- 1.1 图解            - 1.2 授权请求 Authorization Request- GET {认证终点} ?response_type=code // 必选项 &client_id={客户端的ID} // 必选项 &redirect_uri={重定向URI} // 可选项 &scope={申请的权限范围} // 可选项 &state={任意值} // 推荐 HTTP/1.1 HOST: {认证服务器}
1.3 授权响应 Authorization Response
HTTP/1.1 302 Found
Location: {重定向URI}
?code={授权码}          // 必填
&state={任意文字}       // 如果授权请求中包含 state的话那就是必填1.4 令牌请求 Access Token Request
POST {令牌终点} HTTP/1.1
Host: {认证服务器}
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code      // 必填
&code={授权码}                     // 必填 必须是认证服务器响应给的授权码
&redirect_uri={重定向URI}          // 如果授权请求中包含 redirect_uri 那就是必填
&code_verifier={验证码}            // 如果授权请求中包含 code_challenge 那就是必填根据具体情况有可能是向客户端服务器进行请求,这时候请加上 Basic 认证(Authorization 头部)或者是 参数 client_id & client_secret
1.5 令牌响应 Access Token Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
  "access_token":"{访问令牌}",      // 必填
  "token_type":"{令牌类型}",      // 必填
  "expires_in":{过期时间},        // 任意
  "refresh_token":"{刷新令牌}",   // 任意
  "scope":"{授权范围}"            // 如果请求和响应的授权范围不一致就必填
}2. 简化模式 Implicit
2.2 授权请求 Authorization Request
GET {授权终点}
  ?response_type=token             // 必填
  &client_id={客户端ID}      // 必填
  &redirect_uri={重定向URI}  // 可选。授权成功后的重定向地址
  &scope={授权范围}              // 任意
  &state={任意文字}              // 推荐
  HTTP/1.1
HOST: {认证服务器}2.3 授权响应 Authorization Response
HTTP/1.1 302 Found
Location: {重定向URI}
  #access_token={令牌码}       // 必填
  &token_type={令牌类型}     // 必填
  &expires_in={过期时间}       // 任意
  &state={任意文字}            // 如果授权请求中包含 state 那就是必填
  &scope={授权范围}            // 如果请求和响应的授权范围不一致就必填3. 密码模式 Resource Owner Password Credentials
3.2 令牌请求 Access Token Request
POST {令牌终点} HTTP/1.1
Host: {认证服务器}
Content-Type: application/x-www-form-urlencoded
grant_type=password       // 必填
&username={用户ID}    // 必填
&password={密码}    // 必填
&scope={授权范围}       // 任意根据具体情况有可能是向客户端服务器进行请求,这时候请加上 Basic 认证(Authorization 头部)或者是 参数 client_id & client_secret
3.3 令牌响应 Access Token Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
  "access_token":"{访问令牌}",   // 必填
  "token_type":"{令牌类型}",      // 必填
  "expires_in":{过期时间},        // 任意
  "refresh_token":"{刷新令牌}", // 任意
  "scope":"{授权范围}"              // 如果请求和响应的授权范围不一致就必填
}4. 客户端模式 Client Credentials
4.2 令牌请求 Access Token Request
POST {令牌终点} HTTP/1.1
Host: {认证服务器}
Authorization: Basic {客户端模式}
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials     // 必填
&scope={授权范围}               // 任意4.3 令牌响应 Access Token Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
  "access_token":"{访问令牌}",  // 必填
  "token_type":"{令牌类型}",      // 必填
  "expires_in":{过期时间},              // 任意
  "scope":"{授权范围}"                // 如果请求和响应的授权范围不一致就必填
}5. 刷新令牌 Refresh Token
5.1 图解
第三方已存在令牌码为前提进行更新令牌
5.2 令牌请求 Access Token Request
POST {令牌终点} HTTP/1.1
Host: {认证服务器}
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token           // 必填
&refresh_token={刷新令牌}        // 必填
&scope={授权范围}                    // 任意根据具体情况有可能是向客户端服务器进行请求,这时候请加上 Basic 认证(Authorization 头)或者是 参数 client_id & client_secret
5.3 令牌响应 Access Token Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
  "access_token":"{访问令牌}",      // 必填
  "token_type":"{令牌类型}",          // 必填
  "expires_in":{过期时间},                  // 任意
  "refresh_token":"{刷新令牌}", // 任意
  "scope":"{授权范围}"                    // 如果请求和响应的授权范围不一致就必填
}三,总结
| 授权模式 | 授权终点 | 令牌终点 | 
|---|---|---|
| 授权码模式 | 使用 | 使用 | 
| 简化模式 | 使用 | 不使用 | 
| 密码模式 | 不使用 | 使用 | 
| 客户端模式 | 不使用 | 使用 | 
| 刷新令牌 | 不使用 | 使用 | 
其实授权终点就是授权请求和响应
令牌终点就是令牌的请求和响应
感谢您的阅读!
本作品采用《CC 协议》,转载必须注明作者和本文链接
 
           lilshu 的个人博客
 lilshu 的个人博客
        






























 
             
                     
                     
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: