00:00
好,那么这个章节呢,我们来学习一个新的内容,叫做访问令牌,那么访问令牌这个章节呢,我们有三个部分的内容要了解,第一个呢叫什么叫单点登录,第二个呢叫JWT令盘,第三个呢,我们针对JWT令盘呢,做一些简单的测试,好首先呢,我们来说单点登录,那么单点登录呢,实际上啊,我们要讲这样的几部分的内容,第一个呢,就是单一服务器模式的登录哈,第二个呢,就是OSO的单点登录模式,第三个呢,就是token的单点登录模式,那么我们首先来说一下单一服务器的模式,这个实际上是大家在外部阶段学习的一个内容,我们简单的聊回顾一下啊,相当于那么啊外部阶段呢,我们做一个用户登录呢,主要就是比如说有个浏览器对吧?啊,浏览器里面用户可以输入用户名和密码啊,然后接下来呢,有一个外部服务器,外部服务器呢,就是浏览器在,呃,这个用户呢,在浏览器里输入完用户名和密码之后呢,一。
01:01
点击登录按钮,它呢就会被发送给外部服务器,那么外部服务器呢,就会接收到这个用户名和密码,好,那么外部服务器接收到这个用户名密码之后呢,他会对这个用户名和密码呢进行校验,比如说呢,他会检查一下数据库啊用用户名和密码呢,去查询数据库看一看呢,这个数据库当中存不存在相对应的用户,对吧?啊如果存在的话呢,就校验成功了,相当于当校验成功了之后呢,那么这个啊用户信息呢,就会保存在当前的会话中,我们管它呢叫session啊同时呢,在服务器端呢,它实际上啊,每一个浏览器或者是每一个客户端,在对应的服务器端呢,都会有一个唯一的这样的一个30ID代表呢,它的一个啊,相当于记住你的这个会话状态啊,用这个session ID,那么session的信息呢,会写到用户的cookie,怎么写呢?就是当你去访问这个。
02:01
服器的时候,服务器呢,实际上它会给你一个响应,然后这个响应里面呢,实际上它会携带一个session ID过来,这个session ID呢,其实就是我们保存用户会话啊的session的一个核心的一个标识,一个唯一的标识,然后这个session的ID呢,它会存储到我们客户端的cookie当中,所以呢,在cookie当中有session ID,然后在服务器当中有session,并且呢是由session ID做标识的,这样的话呢,就相当于我们的浏览器和服务器能互相记住状态,对吧?啊好,然后呢,每个用户后续的请求都将通过在付费中取出30传递服务器,所以下一次呢,用户再向服务器发起请求的时候,它呢,其实每一个请求呢,都会自动的在他的这个请求头当中携带一个cookie信息,而那个cookie信息里面存的就是30ID发给服务器,服务器呢就找到相应的session ID所对应的三身空间,对吧,这样的话呢,就能够找到当前的用户信息了,这样的话呢,就作为一个什么呀,用户状。
03:01
台的一个校验用户状态的一个认证啊,所以这个是之前你们在外部阶段学的这样的,通过session和cookie,然后呢来记住用户登录状态,绘画状态的这样的一个基本的方式,我们呢管它叫做单一服务器认证模式,好单一服务器认证模式呢,肯定是有它的缺点的啊,优点也有,优点就简单嘛,啊就存个三就完事了,好缺点呢,就是单点性能压力,没有办法扩展,什么叫单点性能压力呢?你看它就一个外部服务器,而且呢是。要记住session的对不对啊,这一个外部服务器呢,需要我们这个记住session,这样的话呢呢,大家就会发现,如果再来一个外部服务器的话啊。我的那个屏幕画笔怎么没有了?好,你用这个吧,默认的屏幕发比不出来了,好,然后接下来呢,我再来一个。这样的外部服务器,这两个外部服务器,那大家想每一个外部服务器呢,他们都是独立的啊,所以他们的这个session其实也是独立的,那同样他们的session ID也是不一样的啊,所以呢,我们的这个用户如果呢,他去访问这个外部服务器,它是一个session ID,他去访问这个外部服务器又是另一套C程ID,所以这两个外部服务器假设说都是我们微服务当中的啊一个这个应用,比如说这个呢,就是我们的oss文件上传对吧,这个呢,就是我们的号核心啊恢复,然后这个呢,就是我们的。
04:32
SMS啊,就是短信发送微服,那大家想如果他们的30ID不一样的话,会出现什么问题,就是比如说我在核心的这个微服务上进行了登录,登录完了之后呢,我的这个session ID啊啊,或者是session信息啊,就存储到了这个微服务当中,对吧?呃,Session空间当中,好,那么存储到这个微服务所在的服务器的三空间当中之后呢,那么它呢,实际上也会给我。发回来一个session ID,然后呢,在我的客户端呢,就存了一个session ID啊,存了一个session ID啊,这个session ID呢,实际上和这个里面的session所这个具有的这个session ID呢,它俩是对应的,所以这样的话,你下一次你再来访问这台服务器的时候,你携带着这个session ID过来,过来之后人家一看啊,有你的session ID,那说明你已经登录过了,对不对,然后呢,接下来同样是这个用户,他实际上已经进行了登录了,只不过现在呢,他要发一个短信,或者是呢,他要上传一个文件,好,他访问了这个,比如说这个上传文件吧,他访问了这个上传文件的服务器,结果呢,服务器啊,假设说我这个文件上传功能必须是登录用户才能够上传,没你这个用户没登录,你上传不了,结果呢,这个。
05:45
他携带的这个啊,这个他他cookie里面的这个30ID啊,实际上是是这个里面的30ID对不对?好,然后他去访问,去访问之后呢,他拿着这30ID去上这台服务器上去访问,能不能访问着这片30空间呢,访问不到,因为这两个服务器呢是独立的,所以说呢,他上这台服务器上一访问这台服务器校验这个session ID,发现这里面没有,就告诉他没登录,然后就通知他没登录,说你呢去登录一下,他一看我刚才明明登录了呀。
06:16
对吧,为什么还让我登录,然后他说那好吧,我登录一下,登录一下之后呢,确实是在这台服务器上又存了一个session。然后这台服务器的3ID呢,又给他返回。这个时候呢,他又存了,就是他的这个三车ID呢,其实又变成这台服务器的赛车ID了,对吧?好这个时候呢,他上传完了,上传完了之后呢,现在呢,他又要访问这个,呃,比如说他个人中心的一些用户信息了,他又跑到这台服务器上来访问,一访问人说你没登录,为什么?因为你现在的这个30ID已经变成这台服务器的30ID了,所以呢,就和这台服务器的30ID呢,又不一致了,又没登录,又没登录,又让他登录,结果这个用户可能就崩溃了哈,因为用户其实并不知道你后台到底有多少台服务器,用户只知道我现在访问的就是上门保这个网站。
07:04
对吧,你给我一个商人宝网站,或者说我访问就是艾特硅谷点com这个网站,不管你后面有多少台服务器呢,我不关心,我也不知道,我也不明白对不对,所以呢,他呢,就希望无论我访问的是哪台服务器,只要我访问的是你整个这个网站,我登录一次,你就让我登录成功,你不要让我跳来跳去,每一次跳到其他的服务器,然后还让我重新登录,对吧,这样的话呢,就。不能满足我们单点登录的这样的一个需求了,所以说如果要满足刚才我们说的这个功能的话呢,必须要实现单点登录啊。这个叫单点登录,所以单点登录的话,我们要解决的问题是什么呀?就是这个session共享的问题,Session共享的问题啊,什么叫session共享,因为刚才我们说到了不同的为服务。不同的位服,他们的这个session其实是没有被共享的,是独立的,各自独立的,所以我们在存这个,拿着这个session ID去找session的时候,总会出现不一致的问题,所以这是session共享的问题,另外这个不同的微服务会出现这个问题,那么我们就是呃,像主虫啊,啊,集群啊,其实都会出现这个问题啊,比如说。
08:16
我现在呢有一个客户端浏览器,然后我这边呢有service call哈,但是service call呢,它的单点这个性能压力太大了,单点性能压力太大的话呢,那我就再弄出一台备份服务器来,或者是弄出一台就是负载均衡服务器来,是吧,然后呢做负载均衡,比如说我先访问他。啊,访问它,然后第二次再访问它,第三次再访问它,第四次在访问它,啊这样负载均衡,那么大家想这也是两台独立的服务器,所以呢,他们K也是两个独立的,他CA,所以三身内存也是两片独立的三身内存,那么接下来呢,我来访问这台服务器,发现没有登录,然后服务器告诉用户说你去登录啊,用户说行,我登录,登完录之后呢,正好通过负载均衡,它又访问到这台服务器,服务器说因为他俩是独立的嘛,你的session存到了这个服务器上,但是这个服务器当中没有,然后服务器说你没登录,然后用户说我登录了呀,我刚登完录回来呀,但实际上用户不知道的是什么呀,他登录完了之后,给他跳转到负载均衡的另一台服务器上了,而另一台服务器上没有他的筛选信息,所以呢就又让用户登录,这样的话一来二去用户肯定他的用户体验是不好的,所以我们就要解决这个问题,什么问题,还是刚才说的session同步问题啊,让这两个session呢?
09:33
共用一片内存空间啊,共用一片空间,或者是我们找一个方法呢,给它做什么呀,做同步啊,做同步怎么才能找一个方法给他做同步呢?那么这个时候大家就想到了,我们学过一个将red缓存的这样的一个服务,然后我们存数据的时候呢,比如说存这个用户信息之前呢,我们都是存在当前的会话中啊,存在这个session当中,现在我们不存session当中了,我们从数据库当中拿到信息,比如说这个是数据库。
10:03
这是数据库哈,你从数据库当中呢,拿到信息之后查到,查到之前是存到这个session当中,对吧,现在我们不存了。忘就存了啊。啊这个啊不存了,就这么,哎呀妈呀,这么掉啊划掉好,然后呢,往哪存呢,往这存。往red里存,明白吧,好,然后接下来呢,这个用户呢,他在访问这台服务器的时候啊,是不是如果你的信息没有存到这个session当中的话,那也就不会去访问session了,你存到哪你就访问哪吧,好,我们存到red当中,所以这次呢,我们上red里查,那大家看red它作为这个两台不同的服务器来说,它既不属于它,也不属于它,它是一比较独立的空间,而且呢,对于这台服务器和这台服务器red这片空间呢,可以被他们两个共享,所以说呢,这个用户信息我们就可以往red里存,那这样的话呢,我们就找到了一个解决方案,就是什么呀,就是单点登录的解决方案啊,单点登录的解决方案那么有很多,其中一种呢,就是把用户信息呢,存在我们的缓存服务器当中。
我来说两句