OAuth2 - 课本式说明

时间 2018/3/6 22:33:23 加载中...

相关:

OAuth2 - 从密码到token, 一个授权的故事

OAuth2 - 课本式说明

介绍

OAuth是关于授权的网络协议,而不是认证的。


OAuth下的几个名词:

Third-party application:第三方应用程序,又称为客户端Client

HTTP Service:HTTP服务提供商(请求授权的一方,或服务提供商)

Resource Owner:资源所有者,即用户

User Agent:用户代理,指浏览器

Authorization Server:认证服务器,即服务商专门用来处理认证的服务器。

Resource Server:资源服务器。

 

大体运行流程:


1.png

 

1、客户端请求用户授权

2、用户同意授权给客户端

3、客户端使用授权向认证服务器申请令牌

4、认证服务器返回令牌给客户端

5、客户端使用令牌访问资源服务器

6、资源服务器确认令牌无误,返回给客户端受保护的资源

 

其中 用户同意授权给客户端,才能获取令牌。

有4种模式:

authorization code 授权码模式

implicit 简化模式

resource owner password credentials 密码模式

client credentials 客户端模式

 

授权码模式

 

2.png

 

(A)用户访问客户端,客户端将导向到认证服务器

(B)认证服务器会询问用户是否授权

(C)用户选择授权后,认证服务器将导向回来(导向回来得URL,再B阶段客户端提供)同时,给了一个“授权码”

(D)客户端拿到授权码后,再后台,使用“授权码”向认证服务器申请“Token”

(E)认证服务器核对授权码后,返回给客户端一个“Token”,有得可能还会有“Refresh Token”。

 

客户端请求认证服务器授权得URL,格式如下:


GET /authorize?
response_type=code
&client_id=s6BhdRkqt3
&state=xyz
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
HTTP/1.1
Host: server.example.com

 

参数说明:

 

response_type :授权类型,必选项

client_id:客户端id

redirect_uri:重定向得URI

scope:申请得权限范围

state:客户端得当前状态,可以指定任意值,认证服务器会原封不动得返回

 

“认证服务器”返回给“客户端”的URI,格式如下 :


HTTP/1.1 302 Found
Location:  
code=SplxlOBeZQQYbYS6WxSbIA
&state=xyz

 

返回的URL中,包含了一个参数“code”和一个参数“state”

code为授权码,该码的有效时间应该短,通常设置为10分钟,且只能使用一次,防止他人使用。

state参数,是认证服务器原封不动返回来的参数值。

  

“客户端”向“认证服务器”申请令牌的URI,格式为:


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%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
&client_id=s6BhdRkqt3

 

grant_type:使用了哪种授权模式,使用”授权码“模式时,值为”authorization_code"

code:“认证服务器”给“客户端”的授权码

redirect_uri:“认证服务器”重定向回来要使用的URI

client_id:客户端ID

 

“认证服务器”向“客户端”返回“Token”的内容为:

 

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"
}

 

其中

access_token:访问令牌

token_type:令牌类型

expires_in:过期时间,单位(秒)

refresh_token:更新令牌,用来获取下一次的令牌,可选

scope:权限范围

 

简化模式:

 简化模式指,没有“授权码”这一步骤,认证服务器直接返回“令牌”。“令牌”对访问都可见。

 

3.png

 

 “客户端”请求“认证服务器”授权的URI:


GET /authorize?response_type=token&client_id=s6BhdRkqt3&state=xyz
        &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
Host: server.example.com

 

“认证服务器”返回给“客户端”的URI:


 HTTP/1.1 302 Found
 Location: http://example.com/cb#access_token=2YotnFZFEjr1zCsicMWpAA
               &state=xyz&token_type=example&expires_in=3600

 

密码模式和客户端模式:略

  

参考资料:

http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

https://www.cnblogs.com/linianhui/p/authentication-based-on-oauth2.html

http://ifeve.com/oauth2-tutorial-all/


扫码分享
版权说明
作者:SQBER
文章来源:http://blog.sqber.com/articles/oauth-summary.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。