OAuth2.0 概念介绍
作者:互联网
前言:先出个简单的构思流程,后面再详细解释具体实际中的流程,真实的流程比较复杂,所以先看概念再理解具体流程。
OAuth协议的出现:随着互联网的发展出现了很多应用:各种网站,游戏,app.....这些应用都需要账号去登陆,刚开始我们只有玩一个游戏一个聊天应用,但随着时代的发展出现了更多的应用:微信,抖音,王者荣耀,LOL,甚至爱奇艺,腾讯视频....这些看电影听歌的app也需要账号登陆了,还记得以前看电影听歌不要钱,而现在,万恶的资本家。扯远了,不好意思~~~~~~~~~~
在这么多应用蜂拥而至的当下我们不可能给他们每个设立一个账号,尽可能的使用一个账号就可以登陆所有的应用,这才适合当下的我们,于是出现大多数应用都能支持:微信,QQ,以及手机验证码登陆,已经很少有账号密码登陆了。
而这些第三方(抖音,王者荣耀,爱奇艺.....)使用微信,QQ,短信验证码登陆,就是用OAuth协议实现的。
OAuth 2.0概念:
第一个出场的是:资源服务器。就像微信的资源服务器,上面存储着你的好友列表,个人信息.....
接着我们使用第三发登陆,最简单的登陆方式:
这种登陆方式最直接,第三方直接请求获取用户数据即可登陆。
问题:但这样要是遭到恶意攻击那用户的数据就直接泄漏。
解决方案:第三方(抖音,爱奇艺....)需要一个权限才能获取数据,这个权限在OAuth2.0中叫:access_token(令牌),这个asscess_token肯定不能用第三方应用程序产生,否则恶意攻击程序也就能自己产生了,所以我们需要一个第三发专门生成access_token的服务器,我们称之为:认证服务器(Autherization server),于是就演变成下面这样:
我们可以看到现在的流程是:第三方先是请求认证服务器获得access_token(令牌),之后使用得到的access_token(令牌)来请求资源服务器,最终拿到资源。
流程看着问题不大但任然有问题:
问题:认证服务器产生access_token,请求者可以随便获取,并且没有什么限制,这样好像恶意程序任然可以通过认证服务器拿到access_token,所以问题还是没解决。
最终解决方案:认证服务器应该得到资源拥有者的同意再产生access_token才行,这样资源拥有者同意过后第三方才能登陆,这样就解决问题了,当恶意程序想要获取access_token时资源拥有者不同意那它就没办法攻击你了,从而也保证了你资源的安全,于是最终OAuth2.0就采用了以下流程:
到目前为止OAuth2.0的基本理念就讲清楚了,之所以一步一步来是想我们要理解他每个模块存在的意义,正真的流程比这个要复杂一些,但理念相同,我们后面在讲。
问题1:去掉认证服务器,第三发直接请求资源拥有者获得access_token不行吗?
首先我们要明白:资源拥有者是终端(我们的手机,电脑...),这些设备属于客户端,若是使用这些设备生成access_token那么恶意程序也就能生成access_token了,因为access_token的算法和数据都暴露给恶意程序了,因此需要服务器去生成,而这个服务器就是认证服务器Authorization server。
问题2:将认证业务与资源放到同一个服务器,然后先请求认证业务获得access_token后,直接获得对应的资源返回给第三方行不行?第三方 -> 认证请求用户返回肯定后直接将资源 -> 第三方,这样一次请求即可,不用那么复杂。
这样做可以,我们同样能获得想要的结果。
但这样做的问题是:认证和资源耦合在一起,业务混乱,不好扩展需要维护额外的数据,如认证请求的数据要存起来等用户响应后在取出来,类似这些数据维护工作要做很多,这样第一:开发量大,业务变的复杂,运行压力大多出很多没必要的开销,总之弊大于利。
标签:介绍,认证,access,概念,token,登陆,服务器,OAuth2.0,资源 来源: https://www.cnblogs.com/li-yan-long/p/15746866.html