目录
首先什么是OAuth2
Spring Security又是什么
为什么用OAuth2
整个流程图
交互过程
第三方接入
Access Token令牌刷新
Refresh Token
客户端授权模式
概述
简化模式
授权码模式
密码模式
客户端模式
总结
声明
假设你有一个“云笔记”产品,分别有“云笔记服务”和“云相册服务”,用户则需要在不同的(pc,Android,iphone,tv,Watch)设备上来访问这些资源(“云笔记”,“云相册”),用户如何访问到属于用户自己的资源呢,传统的做法是用户提供账户和密码给“云笔记”,登陆成功后就可以获取到资源了,但是会产生以下几种问题:
而OAuth2可以帮我们解决这些个问题
核心思想就是,客户端不可以直接访问资源服务器,必须经过认证服务器
比如说我“云笔记”要实现QQ登陆。
这样就可以做到不使用账户和密码就进行登陆,简单来说就是给你自动做了一个简单的注册,只是信息没有那么全面,而且完成QQ登陆后还要进行手机号注册,不然光是昵称这些不足以知道你到底是谁
还有值得注意的一点就是在授权的时候在下面会显示给谁授权,要给他什么东西,如图一所示我要给有道云授权,可以获取我的昵称和头像还有性别
在上面我们提到了资源访问令牌,知道了可以根据这个令牌来访问我们所需要的资源,但是这个access token是保存在客户端上面的,而且是个临时的,因为在客户端上就会有泄露的风险如下图,可以抓包获取到你的access token,而给access token定制一个有效期限可以在一定程度上面防止泄露风险。
但是一旦设置了临时期限的时候,客户端就不是那么方便了。每次access token一过期就要重新向用户索要授权。这样用户每次可能过一天或者几天(根据程序设定时间来算)就要重新进行一次授权操作,会影响使用体验感。
为了解决这一问题,OAuth2引入了Refresh Token机制
其作用就是用来刷新Access Token。认证服务器提供一个接口刷新,如下图一所示。传入refresh_token和client_id,认证服务器验证通过后,返回一个新的Access token,但是为了安全,OAuth2.0采取了两个措施
假如把下面图二中的client_id和client_secret换成app_id和app_secret的话,那么对于写过微信支付对接或者登陆对接的同学是很好理解的
图二客户端必须得到用户的授权(authorztion grant),才可以获取到访问令牌(access token)。而OAuth2.0定义了四种授权方式
简单来说就是在你只有APP或者纯静态HTML5页面而没有服务器(后台)的时候,你要去对接第三方的系统服务,可以使用简化模式,但是该模式下一些权限信息,比如access token就很容易泄流,而且不会刷新
首先从app或者小程序又或者pc端访问API网关,由于是微服务开发,所以在会有网关来处理客户端访问问题,然后由API网关来访问认证服务器,在认证服务器确认你 数据无误(是个成年人)后根据你的回调地址返回一个授权码(我18岁的身份证),这是侯你要再次通过API网关来访问认证服务器来获取到access token(哈尔滨机票),最后才是你根据这个access token去访问资源服务器,这时候你就可以获取访问资源(上飞机了)
还有一种情况就是你是去访问第三方的服务器,比如说微信登陆
这个时候访问的就不是你自己的网关了,而是别人的第三方的服务器,然后根据别人的第三方服务器访问别人第三方的认证服务器,和上面相比就是,不管是API也好,还是认证服务器也好,或者是资源服务器也好,这些都是别人家的?,不是亲爹
要求输入账户和密码,之前我们说了吧自己家的用户信息给到别人家是不好的,但是假设下图,云笔记和云网盘都是自家研发的产品那么就需要自己一套专门定制的登陆页面和接口登入,比如登陆云笔记后我又需要获取云网盘的资源,这时就可以在云笔记的服务上面直接用密码和账户调用云网盘的登陆接口从而实现认证并且获取资源,反之也是一样的
官方描述是假如两家或者多家企业之间的信任关系跟进一步,比如说是合作企业(一条绳上的蚂蚱),那么也是可以用户共享的,反正我GG你也凉是吧,这叫绝对信任。
还有一种就是纯后台的,没有登陆页面可是要登陆的情况下,客户端模式就上场了
不管是绝对信任还是纯后台的,都是鉴权服务器直接对客户端进行身份验证,验证通过返回token
OAuth2是一种授权协议,主要作用就是为了提供这个认证和授权的规范
对于市面上对于这种协议或者标准的实现这目前是推荐两种又或者自己实现
而oAuth2规范中定义了
角色
客户端授权模式
访问令牌
access token(获取到资源服务的凭证),refresh_token(刷新access token)
视频链接来自B站UP主(鲁斯菲尔):https://www.bilibili.com/video/av48590637/?p=8
推荐看完视频理论部分后回顾总结以下,最后进入实战