目录
一、Oauth2基本概念
1、定义
Oauth2是目前最流行的授权机制,用来授权第三方应用,获取用户数据
2、场景带入
1、外卖场景
一户人家住在一个大型居住小区,小区有门禁系统,进入小区需要输入密码,这户人家经常性点外卖,必须让外卖人员进入到小区,如果把密码告诉外卖人员,这样的话,他就和户主拥有了一样的权限,这样安全隐患太大,给了外面人员密码之后,为了安全,必须要进行修改密码,这就很麻烦。
这时候Oauth2就诞生了,外卖人员的职责只是送货,没必要知道小区密码
Oauth2的实现步骤:
1、在门禁系统密码输入器下面,增加一个按钮,叫做“获取授权”,快递员需要首先按这个按钮,去申请授权
2、按下按钮之后,户主的手机就会弹出对话框,有人正在请求授权,系统会显示,该快递员的姓名,工号,和所属的快递公司,户主确认请求属实之后,就点击按钮,告诉门禁系统,户主给与他进入小区的权力
3、门禁系统得到我的确认后吗,向快递员显示一个进去小区的令牌,只在短时间内有效
4、快递员向门禁系统输入令牌,进去小区
2、互联网场景
把以上场景放置到互联网中,就是Oauth2的设计
1、首先,居住小区就是存储用户数据的网络服务,比如微信存储了我的好友信息,获取这些信息,就必须经过微信的"门禁系统"
2、其次,快递员就是第三方应用,想要穿过门禁系统进入小区
3、最后,户主同意第三方应用进入小区,获取户主数据
简单的说,Oauth2就是一种授权机制,数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据,系统从而会产生一个短期的令牌用来代替密码,供第三方应用使用。
3、令牌与密码
令牌和密码的作用是一样的,都可以进入系统,但是有以下三点差异:
1、令牌是短期的,到期就会自动失效,用户自己无法进行修改,但是密码一般长期有效,用户不修改,就不会发生变化
2、令牌可以被所有者立即撤销,会立即失效,但是密码不会
3、令牌有权限范围,比如只能进入小区的几单元就进几单元。
二、Oauth2的角色定义
Oauth2有四种角色,一个是客户端,一个是资源所有者,一个是授权服务器,还有一个是资源服务器
以上述外卖场景为例,
外卖人员----->客户端
户主----->资源所有者
保安----->授权服务器
小区----->资源服务器
三、Oauth2认证方式
1、Oauth2四种认证方式
注意:
不管是哪一种授权方式,第三方应用申请令牌之前,都必须先到系统备案,说明自己的身份,然后拿到两个身份的识别码,客户端和客户端密钥,这是防止密钥被滥用,没有备案过的第三方的应用,是不会拿到令牌的
2、授权码方式
1、概念:
授权方式:第三方应用先申请一个授权码,然后再用改码获取令牌
2、步骤:
1、A网站提供一个链接,用户点击之后跳转到B网站,授权用户数据给A网站使用
2、用户跳转后,B网站会要求用户进行登录,然后询问是否同意给与A网站授权,用户表示同意,这时B网站就会跳回到redirect_uri参数指定路径,跳转时,会传回一个授权码。
3、A网站拿到授权码之后,就可以在后端向B网站请求令牌
4、B网站收到请求后,就会颁发令牌,具体做法是向redirect_uri指定地址,发送一个Json数据
3、隐藏式方式
1、概念:
2、步骤:
1、A网站提供一个链接,用户点击之后跳转到B网站,授权用户数据给A网站使用
2、用户跳转到B网站,登录后同意给与A网站授权,这时,B网站就会跳回redirect_uri
参数指定跳转网址,并把令牌作为URL参数传给A网站
4、密码式方式
1、概念:
2、步骤:
1、A网站要求用户提供B网站的用户名和密码,拿到之后,A直接向B请求令牌
2、B网验证身份通过后,直接给出令牌(注意:这是不需要跳转)
5、凭证式方式
1、步骤
1、A应用在命令行向B发送请求
2、B网站验证通过以后,直接返回令牌
这种方式给出的令牌,是针对第三方应用的,而不是针对用户的,即有可能多个用户共享一个令牌
四、Oauth2与JWT的区别
1、JWT机制
1、定义:
2、JWT的组成部分:
3、JWT解决的问题:
4、适用的场景:
一次性的身份认证,api的鉴权
5、不适用的场景:
具体的JWT知识自己博客也有写到,可以进行参考:
JWT介绍_I Want To IT Master的博客-CSDN博客
2、Oauth2机制
上面已对Oauth2机制进行讲解,需要进行对比,只需将两个事务列出来,然后就一目了然
今天的知识就分享到这了,希望能够帮助到你!