网络原理3.OAuth2.0 四种授权模式

一. OAuth2.0简介

OAuth2.0是一个标准, 开放标准, 允许用户让第三方应用访问该用户在某一网站的资源, 而无需将用户名和密码提供给第三方应用

二. OAuth2.0四种授权模式

  1. 授权码(认证码)模式(Authorization Code)
  2. 简化(隐形)模式(Impilict)
  3. 用户名密码(Resource Owner Password Credential)
  4. 客户端模式(Client Credential)

1. 授权码(认证码)模式(Authorization Code)

  • 授权码模式是最完整,最严密的授权模式
  • 主要是客户端后端娱认证服务器进行认证操作
  • response_type=code
认证步骤:
http_outh2_code.png
1.1 第2步中,客户端将用户导向认证服务器

客户端服务器请求参数如下:

参数 作用 是否必填
reponse_type 授权类型,授权码模式固定为code Y
client_id 客户端ID Y
redirect_uri 重定向URL N
scope 权限申请范围 N
state 客户端服务器状态, 认证服务器会原封不动的返回给客户端服务器 N

客户端服务器HTTP请求报文如下:

GET /authorize?response_type=code&client_id={client_id}&redirect_uri={redect_uri}&state={state} HTTP/1.1 
Host: server.com 

1.2 第4步中,认证服务器响应报文,将用户导向重定向URI

认证服务器响应参数如下:

参数 作用 是否必填
code 授权码,有效期一般为10分钟,只能使用一次,客户端服务器用来获取令牌 Y
state 认证服务器返回的客户端服务器状态 N

认证服务器响应报文如下:

//浏览器会通过Location响应头进行重定向
HTTP/1.1 302 Found 
Location: http://client.com/path?code={code}&state={state} 

1.3 第5步中,客户端服务器向认证服务器申请令牌

客户端服务器请求参数如下:

参数 作用 是否必填
grant_type 授权模式,授权码模式固定为authorization_code Y
code 认证服务器返回的code Y
redirect_uri 第2步中的重定向URI Y
client_id 客户端ID Y

客户端服务器请求报文:

POST /token HTTP/1.1 
Host: server.com 
 
grant_type=authorization_code&code={code}&redirect_uri={redirect_uri}&client_id={client_id} 

1.4 第6步中,认证服务器响应客户端获取令牌请求

认证服务器响应参数如下:

参数 作用 是否必填
access_token 访问资源服务器的令牌 Y
token_type 令牌的类型,可以是bearer或者mac等等 Y
expires_in 令牌时长,单位为秒 Y
refresh_token 更新令牌,用来获取下一个令牌 N
scope 权限范围 N

认证服务器响应报文如下:

HTTP/1.1 200 OK 
Content-Type: application/json;charset=UTF-8 
 
{ 
   "access_token":"{access_token}", 
   "token_type":"bearer", 
   "expires_in":3600, 
   "refresh_token":"{token}"
} 

2.简化(隐形)模式(Impilict)

  • 不通过第三方应用程序,直接在浏览器中向认证服务器申请令牌
  • 跳过了申请认证码的这一步
  • 令牌是可见的
  • 而且客户端服务器不需要认证
  • reponse_type=token
认证步骤:
http_outh2_impilict.png
2.1 第2步中,客户端将用户导向至认证服务器

客户端服务器请求参数如下:

参数 作用 是否必填
reponse_type 授权类型,授权码模式固定为token Y
client_id 客户端ID Y
redirect_uri 重定向URL N
scope 权限申请范围 N
state 客户端服务器状态, 认证服务器会原封不动的返回给客户端服务器 N

客户端服务器请求报文:

GET /authorize?response_type=token&client_id={client_id}&redirect_uri={redect_uri}&state={state} HTTP/1.1 
Host: server.com 

2.2 第4步中,认证服务器将用户导向至回调地址

认证服务器响应参数如下:

参数 作用 是否必填
access_token 访问资源服务器的令牌 Y
token_type 令牌的类型,可以是bearer或者mac等等 Y
expires_in 令牌时长,单位为秒 Y
scope 权限范围 N
state 认证服务器返回的客户端服务器状态 N

认证服务器响应报文:

HTTP/1.1 302 Found 
Location: http://client.com/path#access_token={access_token}&token_type=bearer&state={state}&expires_in={expires_in} 

2.3 第5步中,资源服务器重定向之后,资源服务器向客户端服务器发起请求,表示想获取URI中的token
2.4 第6步中,客户端服务器返回带有解析脚本的页面,解析重定向URI Hash(fragment,也就是#后面的部分)中的Access Token

3. 用户名密码模式(Resource Owner Password Credential)

  • grant_type=password
认证步骤:
http_outh2_password.png
3.1 第1步中,客户端向认证服务器请求令牌

客户端服务器请求参数如下:

参数 作用 是否必填
reponse_type 授权类型,简化模式固定为password Y
username 用户名 Y
password 密码 Y
scope 权限申请范围 N

客户端服务器请求报文:

POST /token HTTP/1.1 
Host: server.com 
 
grant_type=password&username={username}&password={password}
3.2 第2步中,认证服务器响应客户端

认证服务器响应参数如下:

参数 作用 是否必填
access_token 访问资源服务器的令牌 Y
token_type 令牌的类型,可以是bearer或者mac等等 Y
expires_in 令牌时长,单位为秒 Y
refresh_token 更新令牌,用来获取下一个令牌 N
scope 权限范围 N

认证服务器响应报文如下:

HTTP/1.1 200 OK 
Content-Type: application/json;charset=UTF-8 
 
{ 
   "access_token":"{access_token}", 
   "token_type":"bearer", 
   "expires_in":3600, 
   "refresh_token":"{token}"
} 

4. 客户端模式(Client Credential)

  • grant_type=client_credential


    http_outh2_client.png

你可能感兴趣的:(网络原理3.OAuth2.0 四种授权模式)