<返回更多

基于oAuth的授权登陆

2020-07-08    
加入收藏

为什么需要oAuth

如果你接触网络的时间比较早,你应该能体会到网站注册登录方式的变化:

你会发现,注册登录的方式越来越简单:

可以看出,现在微信、微博、QQ这些用户基数大的软件,替代了当初的邮箱、手机,变成了注册登录的基础设施。而且更加的安全:

同时你也不需要记一堆乱七八糟的密码了,只需要记着微信、微博、QQ的账号密码就可以了。

另一方面,对开发者来说,也省去了对账号体系的管理,只需要遵循oAuth规范来接入微信、微博、QQ即可,降低了开发成本。

了解了oAuth的作用,我们来看一看oAuth的实现。

oAuth的概念

前段时间阅文集团合同事件闹得沸沸扬扬,其中一个主要的问题就是资源所属问题,合同里规定作者写的作品归阅文集团所有!网友立马就炸了,那作品到底归作者所有还是阅文集团所有呢?oAuth协议里已经给出了答案。

oAuth定义了四个角色:

OAuth 2.0的运行流程如下图:

基于oAuth的授权登陆

 

假设我们要通过阅文来登录一个第三方网站:

流程里很明显:

从上面的流程可以看出,整个流程中「三方网站」没有获取到用户的任何敏感信息,且获取的信息需要用户主动授权后才能获取到,保证了安全性和便利性。

oAuth的分类

下面来一个个的说明具体的授权模式。在开始之前,需要多理解几个概念:

授权码模式(Authorization Code Grant)

基于oAuth的授权登陆

 

授权码模式是功能最完整、流程最严密的授权模式。它通过Client的后台服务器,与「服务提供商」的认证服务器进行互动置换token。具体流程如下:

更新令牌(RefreshToken)的作用下文说明

简化模式(Implicit Grant)

基于oAuth的授权登陆

 

简化模式不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤。所有步骤在浏览器中完成,令牌对用户是可见的,且客户端不需要认证。具体流程如下:

密码模式(Resource Owner Password Credentials Grant)

基于oAuth的授权登陆

 

相对于上面两种授权模式,密码模式相对的不安全,因为用户需要向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。虽然协议里规定客户端不能存储账号密码,不过除非你非常信任客户端,否则应该不会使用这种模式。

这种授权模式的具体流程如下:

客户端模式(Client Credentials Grant)

基于oAuth的授权登陆

 

客户端模式下,用户直接向客户端注册,客户端以自己的名义要求"服务提供商"提供服务。具体流程如下:

更新令牌

在上面的流程中,认证服务器认证后返回的数据,除了访问令牌,还有一个更新令牌。我们知道了,通过访问令牌我们才能够访问资源,那更新令牌是做什么用的呢?

我们都知道,一般网站登录会有一个超时时间,这里也不例外。访问令牌也有一个超时时间。更新令牌就是用于在访问令牌过期后来获取新的访问令牌的。

基于oAuth的授权登陆

 

最后补充

在上面的流程中,实际还缺少了一步,就是注册客户端。如果你接过微信、微博或QQ的授权登陆,那么应该清楚,在开始接入之前,我们需要在他们的开放平台上申请我们的应用,申请成功后会给我们一个AppId和一个appSecrect。

这个的appId就是用来唯一确定客户端的。而appSecrect就是在授权模式中,客户端的后台与授权服务器交互时需要连同code,appId一起提供的,用于置换访问令牌的。

总结

本文解释了oAuth的作用,并梳理了oAuth的具体流程。

参考文档

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>