Spring Social-OAuth协议简介
2019-06-09 本文已影响5人
青衣敖王侯
在使用Spring Social开发第三方登录之前我们需要讲讲OAuth协议。
1.OAuth协议要解决的问题
大部分用户都是用过微信,假设我们要开发一个微信助手,这个微信助手的功能是为了读取和美化微信用户的自拍数据,此时我们该怎么办?直接让微信把自拍数据发给我们是不可能的,那有的同学说,我们可以让用户把微信的用户名密码发给我们,然后我们通过用户名密码登录微信,然后去拿用户的数据。流程如下图所示:
那这会有什么问题呢?
- 我们的开发的助手可以访问用户在微信上的所有数据,而不仅仅是自拍数据
- 用户只有修改密码,才能收回授权。但是如果这个用户还给除了我们的助手以外的第三方应用也授权,密码一改,所有的第三方应用都无法使用用户的数据了
-
密码泄露的可能性大大提高
为了解决这个问题,OAuth登场了!
此时用户给的不再是用户名和密码,而是给了一个Token到第三方应用,第三方应用利用这个Token就可以到微信去读取相应的数据了。具体的流程和角色我们看看OAuth协议中的各个角色
2.OAuth协议中的各个角色
OAuth协议中的各个角色- 0.微信用户首先访问我们的第三方应用Client(角色)
- 1.Client向资源所有者(角色)请求授权,也就是微信用户
- 2.资源所有者同意授权
- 3.Client得到同意授权后,向服务提供商申请令牌,服务提供商也是一个角色,但是服务提供商里面有认证服务器和资源服务器,认证服务器专门负责发送Token,资源服务器负责验证Token和开放资源,在这里的步骤中只是到认证服务器中申请令牌
- 4.认证服务器发放令牌给Client
- 5.Client拿着令牌到资源服务器去做验证,并申请用户的自拍数据
- 6.资源服务器验证后,开放资源给Client
这就是OAuth协议,但是其中最最关键的就是第2步骤,同意授权,这也是所有流程中最最复杂的一个地方。目前的授权模式有4个: - 1.授权码模式(最广泛使用的一种方式)
- 2.简化模式
- 3.密码模式
- 4.客户端模式
3.OAuth协议运行流程
这篇文章我们重点讲解一下授权码模式,如下图所示:
授权码模式
- 0.用户访问Client
- 1.Client将用户导向认证服务器
- 2.用户在认证服务器中同意授权
- 3.认证服务器得到授权后,按照和第三方Client之前的约定,将授权码(不是Token)发送到Client指定的后端服务中
- 4.Client的后端应用得到授权码后,把授权再次返回给服务提供商,获取令牌
- 5.认证服务器发放令牌
授权码模式和别的模式不同的地方的关键点就在于用户同意授权是在认证服务器中完成的,而其他模式是在Client中完成的。简化模式中认证服务器不再返回授权码,而是直接返回令牌。