Oauth 简介

一. OAuth 概念

二. OAuth 运行流程

三. OAuth 授权模式


一. OAuth 概念

        OAuth 是一个开放标准,在全世界得到广泛应用,目前版本为 2.0。什么是 OAuth,可以举一个例子:

        有一个 “云冲印”的网站,可以把用户存储在 google 上的照片,冲印出来。用户为了使用该服务,必须让 “云冲印”读取自己存储在 Google 上

的照片。问题是只有得到用户授权,Google 才会同意 “云冲印” 读取这些照片,那么,“云冲印” 怎么获得用户的授权呢?

        传统方法是,用户将自己的 谷歌的 账号密码,告诉 “云冲印”,后者就可以读取用户的照片了。但是这种方式有几个严重的缺点:

  • 用户无法限制 云冲印 获得授权的范围和有效期。除非改密码,改了密码,其他授权的第三方的应用程序全部失效。

  • 只要有一个第三方应用程序,就会导致用户密码泄漏。

        OAuth就是为了解决上述的这些问题,让“客户端” 安全可控地获得“用户”地授权,与“服务提供商”进行互动。

        OAuth 在客户端 和服务提供商之间设置了一个 授权层。“客户端”不能直接登录“服务提供商”,只能登录授权层。“客户端”登录授权层所用的

令牌(token),与用户密码不同。用户可以指定授权层令牌的权限范围 和 有效期。“客户端”登录授权层后,“服务提供商”根据令牌的权限范围 和 

有效期,向 “客户端” 开发用户存储资料。


二. OAuth 运行流程

        几个术语:

  • Resource owner:资源所有者,本文中 称为 “用户”。

  • User Agent:用户代理

  • Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。

  • Resource server:资源服务器,即用户提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。


    流程如下:

  1. A 用户打开客户端以后,客户端要求用户给予授权。

  2. B 用户同意给予客户端授权。

  3. C 客户端使用上一步获得的授权,向认证服务器申请令牌。

  4. D 认证服务器对客户端进行认证后,确认无误后,同意发放令牌。

  5. E 客户端使用令牌,向资源服务器申请获取资源。

  6. F 资源服务器确认令牌无误后,同意向客户端开发资源。

        上面的6个步骤中,重点在于 B 。即用户怎么给客户端授权。有了这个授权,客户端就可以获取令牌,进而凭借令牌获取资源。


三. OAuth 授权模式

        OAuth 2.0 定义了 四种授权模式。分别为:

  • 授权码模式。

  • 简化模式。

  • 密码模式。

  • 客户端模式。


3.1 授权码模式

        授权码模式 是功能最完整,流程最严密 的授权模式。它的特点就是通过客户端的后台服务器,与 “服务提供商”的认证服务器进行互动。

流程如下:


  1. A 用户访问客户端,后者将前者导向认证服务器。

  2. B 用户选择是否给予客户端授权。

  3. C 假如用户给予授权,认证服务器将用户导向客户端事先指定的 “重定向URI”(redirection URI),同时附上一个授权码。  

  4. 客户端收到授权码,附上早先的 “重定向URI” ,向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可 见。

  5. 认证服务器核对了授权码 和 重定向 URI,确认无误后,向客户端发送访问令牌和 更新令牌。

Ps:另外一幅图 解释这个过程:


3.2 简化模式

        简化模式 不经过第三方应用程序的服务器,直接在浏览器中 向认证服务器申请令牌,跳过了 “授权码” 这个步骤,因此得名。所有步骤在浏览器中

完成,令牌对访问者是可见的,而且客户端不需要认证。



  1. A 用户访问客户端,后者将前者导向认证服务器。

  2. B 用户选择是否给予客户端授权。

  3. C 假如用户给予授权,认证服务器将用户导向客户端事先指定的 “重定向URI”(redirection URI),并且在 URI 的hash 部分包含了访问令牌。  

  4. D 浏览器向资源服务器发出请求,其中不包括上一步收到的 hash 值。

  5. E 资源服务器返回一个网页,其中包含的代码可以获取Hash值中的令牌。

  6. F 浏览器执行上一步获得的脚本,提取出令牌。

  7. G 浏览器将令牌发送给客户端。


3.3 密码模式

        用户向 客户端提供 用户名密码。客户端使用这些信息,向 “服务商提供商”索要授权。在这种模式下,客户端不得存储密码。这通常用在用户对客

户端高度可信的情况下。认证服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式。


  1. A 用户向客户端提供用户名,密码。

  2. B 客户端用用户名,密码发给认证服务器,向后者请求令牌。

  3. C 认证服务器确认无误后,向客户端提供访问令牌。


3.4 客户端模式

        指客户端使用自己的名义,而不是以用户的名义,向 “服务提供商” 进行认证。严格来说,客户端模式并不属于 OAuth 框架所需要解决的问题。

在这种模式中,用户直接向客户端注册,客户端以自己的名义要求 “服务提供商” 提供服务,其实并不存在授权的问题。


  1. A 客户端向认证服务器进行身份认证,并且要求一个访问令牌。   

  2. B 认证服务器认证无误后,向客户端提供访问令牌。



四. 参考

  1. 理解 OAuth 2.0: http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

  2. 使用 OAuth 2.0 访问豆瓣 API : http://developers.douban.com/wiki/?title=oauth2

  3. Kong :https://getkong.org/plugins/oauth2-authentication/#authorization-code

  4. Oauth 文档:tools.ietf.org/html/rfc6749


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值