一篇文章教你学会单点登录与cas

大家好 ,我是才浅。今天想跟大家讲讲关於单点登录的那些事,在面试过程中有时候会被问到单点登录,那么单点登录又称之为Single Sign On,简称SSO,单点登录可以通过基于用户会话的共享,来实现登录一个网站其他网站就不用再次登录功能。由于域名的原因分为‘相同顶级域名’和‘不同顶级域名’单点登录两种。
今天我希望用简单的方式就把两种的实现方案都给他讲透说明白喽,这样以后无论是工作中还是面试中如果有这方面的问题都可以用到。
如果觉得看的还可以,希望可以给我点个赞,您的赞是我写作的最大动力。

一。什么是单点登录

单点登录又称之为Single Sign On,简称SSO,单点登录可以通过基于用户会话的共享。利用单点登录可以实现用户只登录一次就可以访问几个不同的网站。用户自始至终只在某一个网站下登录后,那么他所产生的会话,就共享给了其他的网站,实现了单点网站登录后,同时间接登录了其他的网站,那么这个其实就是单点登录,他们的会话是共享的,都是同一个用户会话。
例如:登录了qq,那么qq音乐,qq视频之类的就都不用登录了,可以直接访问。

二。相同顶级域名的单点登录解决方案

因为是相同的顶级域名,顶级域名和下级域名之间cookie是共享的,这样通过cookie+redis就可以实现单点登录。
如果分布式会话后端是基于redis的,如此会话可以流窜在后端的任意系统,都能获取到缓存中的用户数据信息,前端通过使用cookie,可以保证在同域名的一级二级站点下获取,那么这样一来,cookie中的信息userid和token是可以在发送请求的时候携带上的,这样从前端请求后端后是可以获取拿到的,这样一来,其实用户在某一端登录注册以后,其实cookie和redis中都会带有用户信息,只要用户不退出,那么就能在任意一个站点实现登录了。

那么这个原理主要也是cookie和网站的依赖关系,顶级域名 和下级域名的cookie值是可以共享的,可以被携带至后端的。
二级域名自己的独立cookie是不能共享的,不能被其他二级域名获取,比如:a.abc.com的cookie是不能被b.abc.com共享,两者互不影响,要共享必须设置为.abc.com。
在这里插入图片描述

三。不同顶级域名的单点登录解决方案

那么如果顶级域名都不一样,咋办?比如 www.aaa.com要和www.bbb.com的会话实现共享,这个时候又该如何?!如下图,这个时候的cookie由于顶级域名不同,就不能实现cookie跨域了,每个站点各自请求到服务端,cookie无法同步。比如,www.aaa.com下的用户发起请求后会有cookie,但是他又访问了www.bbb.com,由于cookie无法携带,所以会要你二次登录。
因为不同顶级域名,cookie直接是不共享的,所以就不能用cookid+reids这种方式来做单点登录了,这个时候我们可以用cas来实现单点登录.

CAS全称为Central Authentication Service即中央认证服务
在这里插入图片描述

如图所示,各个系统之间的登录会通过一个独立的登录系统去做验证,它就相当于是一个中介公司,整合了所有人,你要看房经过中介允许拿钥匙就行,实现了统一的登录。那么这个就称之为CAS系统,CAS全称为Central Authentication Service即中央认证服务,是一个单点登录的解决方案,可以用于不同顶级域名之间的单点登录。

四。cas系统详解

CAS全称为Central Authentication Service即中央认证服务,是一个单点登录的解决方案,可以用于不同顶级域名之间的单点登录。

初次登录流程解析:
  1. 当用户访问到A网站的时候,网站会首先判断他是否在cas系统登录过,如何判断是否登录呢?主要是在cookid中看是否有登录信息。如果没有登录,网站会携带上自己的url去访问cas系统登录接口。
  2. 当cas系统接受到这样一个请求会,会查看自己是否有cookie,如果没有会弹出登录窗口让用户登录。
  3. 如果用户登录成功后,cas系统会进行三步处理
    3.1. 创建用户会话,把用户的信息作为值,把用户的id作为健存入到redis或者其他数据库中,用来在用户登录进来后获取用户信息
    3.2 创建用户全局门票,把用户id作为值,随机数当作健存入redis和cookie中,用以表示在CAS端是否登录
    3.3 创建临时门票,把随机数当作健值存入redis中,用于回跳回传
  4. 将临时票据作为参数回调回A网站
  5. 当A网站有临时票据后会把拿着这个票据访问cas的兑换票据接口
  6. cas兑换票据接口会做这样几件事
    6.1. cas会先判断这个票据是否是合法票据
    6.2. 如果是合法票据,就把这个临时票据销毁,然后通过cas中的cookie信息去获取到用户id
    6.2. 在通过用户id获取到全局会话,把会话传递会A界面
    7.当A界面获取到会话后,存入自己的cookie中,这样以后就不用再去请求cas了
二次访问流程

1.当用户访问到B网站后,B网站也会判断他是否在cas系统登录过,如果没有cookie信息(注意:这个时候会有两个cooklie信息,一个是用户的全局会话,一个是cas的全局门票,这里说的没有cookie信息,说的是没有全局会话),网站会携带上自己的url去访问cas系统登录接口。
2.因为这个时候cas系统发现有cookie信息,证明用户已经登录过了,那就只要在创建一个临时票据回传给B网站就好了。
3. 其他剩下操作与第一次访问相同。

cas系统流程图

在这里插入图片描述

举例说明

cas系统可以看成是一个公园,公园需要买票才能进入,但是可能公园中的有一些景点一张票只能玩一次,需要用门票去换取一次性票据去游玩,在门口买的票就相当于CAS系统的全局门票和用户全局会话。只能玩一次换的一次性票据就相当于临时票据。

总结

首先跟大家普及了一下什么是单点登录,单点登录在分布式中用的还是蛮多的,并且跟大家分享了一下两种单点登录的实现方案,大家如果对单点登录有兴趣的话,我会在下一篇给大家徒手撸一个cas系统。如果对文章有什么建议或者疑问也可以给我留言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章