深入理解OAuth2.0协议

什么是授权

许多豪车都有主钥匙泊车钥匙.当你到酒店时,把泊车钥匙交给服务生,就相当于将使用汽车的一部分受限权限交给了服务生,这就是一种简单的授权行为.

泊车钥匙功能

  • 启动发动机并让汽车行驶一段有限的距离
  • 可以锁车
  • 无法打开
  • 无法使用车内其他设备
  • ……

授权是组织运作的关键,它是以人为对象,将完成某项工作所必须的权力授给部署人员.


开放授权和封闭授权

封闭授权

系统内部用户之前的互相授权,不能支持与外部系统与用户之间的授权.

  • QQ空间访问权限
  • 微信查看朋友圈信息权限(不让别人看,可以查看十张照片等)
  • ……

若想要与外部系统进行连接,只能将该系统的账号密码告诉外部系统.这样安全隐私将完全得不到保护.

开放授权

支持将系统内资源授权给第三方应用使用.

  • 支持细粒度权限控制
  • 不会泄露用户密码或其他认证凭据

权限的控制掌握在用户手中,不会出现安全和隐私不可控的情况.


OAuth协议

开放授权目前有两种方法:

  1. 使用OAuth协议 (现场授权,在线授权)
  2. 使用IAM服务 (预先授权,离线授权)

OAuth授权过程

通过浏览器访问资源 --> 认证资源所有者身份 --> 现场审批,并确定权限内容

OAuth1.0 和 OAuth2.0

最初的OAuth1.0协议过于复杂,易用性差,没有被普及.OAuth2.0是全新设计的,可以说与OAuth1.0是两个完全不同的协议.现在主流使用OAuth2.0,这篇blog也主要围绕OAuth2.0展开.

协议参与者

  • RO(resource owner): 拥有资源的所有权限,并对资源具有授权能力的人.
  • RS(respurce server): 存储授权相关的资源,并处理外界对资源的访问请求.
  • AS(authorization server): 认证RO身份,提供审批流程,并最终发放Access Token.
  • Clien: 被授权的第三方应用,被RO授权后就可以使用特定的权限访问响应资源.

其中资源服务器认证服务器只是在概念上有区分,物理上可以使用同一个服务器来完成两者的功能.

授权基本思路

  1. 客户端资源所有者发送授权请求,包含客户端身份信息,要请求的资源路径,对数据的操作方法等.
  2. 资源所有者批准授权,并将认证发送给客户端.若不批准授权的话,就返回客户端拒绝授权信息,然后整个授权流程就结束了.
  3. 客户端授权服务器发送授权认证,证明自己是已经被授权过了的.
  4. 授权服务器确认授权认证,然后发送AccessToken给客户端,使其能对特定资源进行特定的操作.
  5. 客户端在AccessToken有效期内就可以向资源服务器请求响应的资源.
  6. 资源服务器在确定AccessToken有效性和真实性后,就为客户端的请求提供相应的操作.

由于AccessToken有效期一般较短,在offline的请求方式里授权服务器颁发AccessToken的同时还会颁发一个RefreshToken.为了流程优化,该方式将允许客户端直接持RefreshToken换取一个新的AccessToken.这样就避免了不停请求,验证,刷新AccessToken所造成的麻烦.


参考文献

[1] http://blog.csdn.net/seccloud/article/details/8192707

[2] http://oauth.net/2/

[3] http://baike.baidu.com/view/58078.html

Loading Disqus comments...
Table of Contents