一、OAuth2是什么?
OAuth2是目前最流行的授权协议, 用来授权第三方应用,获取用户数据。此授权协议一般涉及的角色有:Resource Owner(资源持有者)、Client(客户端)、Authorization Server(授权服务器)、Resource Server(资源服务器)、User Agent(中介,如浏览器)。
先看两个栗子:
第一个是快递员授权机制设计;第二个是用户使用QQ账号登录京东的过程
以上两个均为授权验证的场景,现在尝试从两个场景中抽象出性质相同(或者相近)的角色;
客户端(需要得到授权的角色):案例1是快递员;案例2是京东网站
资源服务器和授权服务器:案例1是门禁系统(以及小区的门?);案例2是QQ
再次以案例2来说明,因为客户端和认证服务器双方的不信任产生的这样一个授权协议,如果信任QQ开放数据库给京东,就可省去跳来跳去的环节。
OAuth2.0和1.0的区别
1)2.0授权模式有4种,而1.0授权模式只有1种;
2)1.0版本用的是http协议,申请RequestToken过程中,容易被攻击者调包,调拨后目的是伪造回调地址,拿到用户的accessToken。2.0版本针对上述问题做了四点改进:①去掉了签名,改用SSL(HTTPS)确保安全性;②所有的token不再有对应的secret存在,签名过程简洁,这也直接导致OAuth2.0不兼容老版本;③能更好地支持不是基于浏览器的应用;④OAuth2.0的访问令牌是“短命的”,且有刷新令牌。
二、OAuth2授权模式解析
1)授权码模式
2)简化模式
简化模式不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过“授权码”这个步骤,因此称简化模式(简化是相对授权码模式而言)。
3)密码模式
密码模式中,用户向客户端提供自己的用户名和密码,这通常用在用户对客户端高度信任的情况,项目采用此种模式。
4)客户端模式
客户端模式是指客户端用自己的名义而不是用户的名义向服务提供者申请授权,很少使用。