OAuth2
什么是OAuth2
OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。
演化历程
背景:照片拥有者想要在云冲印服务上打印照片,云冲印服务需要访问云存储服务上的资源,这时云冲印服务就需要获取用户的授权,去云服务器上获取照片拥有者需要获取的照片资源。
资源拥有者:照片拥有者
客户应用:云冲印
受保护的资源:照片
方式一:用户名密码复制
用户(资源拥有者)将自己的**"云存储"服务(受保护的资源)的用户名和密码**,告诉"云冲印"(客户应用),后者就可以读取用户的照片了。这样的做法有以下几个严重的缺点。
(1)“云冲印”(客户应用)为了后续的服务,会保存用户的密码,这样很不安全。
(2)Google不得不部署密码登录,而我们知道,单纯的密码登录并不安全。
(3)"云冲印"拥有了获取用户储存在Google所有资料的权力,用户没法限制"云冲印"获得授权的范围和有效期。
(4)用户只有修改密码,才能收回赋予"云冲印"的权力。但是这样做,会使得其他所有获得用户授权的第三方应用程序全部失效。
(5)只要有一个第三方应用程序被破解,就会导致用户密码泄漏,以及所有被密码保护的数据泄漏。
总结:
将受保护的资源中的用户名和密码存储在客户应用的服务器上,使用时直接使用这个用户名和密码登录
适用于同一公司内部的多个系统,不适用于不受信的第三方应用
方式二:通用开发者key
适用于合作商或者授信的不同业务部门之间(类似于一把万能钥匙)
方式三:颁发令牌
接近OAuth2方式,需要考虑如何管理令牌、颁发令牌、吊销令牌,需要统一的协议,因此就有了OAuth2协议
令牌类比仆从钥匙
应用场景
第三方应用授权登录:开放系统间授权,在APP或者网页接入一些第三方应用时,时长会需要用户登录另一个合作平台,比如QQ,微博,微信的授权登录。
Oauth2的流程
Oauth2,client就是第三方应用,根据RFC6749文档,大致的流程如下图所示
(A)用户打开客户端以后,客户端要求用户给予授权。
(B)用户同意给予客户端授权。
(C)客户端使用上一步获得的授权,向认证服务器申请令牌。
(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌,发放一个Access token。
(E)客户端使用令牌Access token,向资源服务器申请获取资源。
(F)资源服务器确认令牌无误,同意向客户端开放资
源。