前言: CAS是一个合格java开发工程师必须要掌握的知识,狐狸将自己的理解都写下来,此文章仅代表鄙人的总结和理解,如有错漏,欢迎指正...
单点登录又称之为Single Sign On,简称SSO,单点登录可以通过基于用户会话的共享,他分为两种。
1、Redis+Cookie分布式会话来实现【相同顶级域名;基于Redis】
2、CAS系统(中央认证服务)【不同顶级域名;独立的登录系统】
CAS实现单点登录的总结:
3个关键信息:
1、创建用户全局会话(保存在redis的用户信息)
2、全局门票ticket(存放在cas端的cookies中)
3、临时票据(一次性使用,用于在各个子系统中调用验证。)
* CAS的统一登录接口
* 目的:
* 1. 登录后创建用户的全局会话 -> uniqueToken
* 2. 创建用户全局门票,用以表示在CAS端是否登录 -> userTicket
* 3. 创建用户的临时票据,用于回跳回传 -> tmpTicket
/**
* 举例:
* 我们去动物园玩耍,大门口买了一张统一的门票,这个就是CAS系统的全局门票和用户全局会话。
* 动物园里有一些小的景点,需要凭你的门票去领取一次性的票据,有了这张票据以后就能去一些小的景点游玩了。
* 这样的一个个的小景点其实就是我们这里所对应的一个个的站点。
* 当我们使用完毕这张临时票据以后,就需要销毁。
*/
大致的逻辑就是:
1、前端先判断用户是否有登录,即是否在cookies中有用户信息,有user信息就直接放行。
2、如果cookies中没有user信息,判断是否有临时票据,就去验证,如果通过就放行并且把有用户信息存在cookies里,下次第一步中就直接是登录状态了,如果没有临时票据,那就走登录流程
3、登录流程中,判断cookies中是否有全局门票,如果有全局门票那么就是已经登陆过了,那么就返回一个临时票据即可。如果没有全局门票,那么就跳转到cas登录页面进行登录。
参考博客:
结语:以往都是看别人的博客进行学习技术,其中不乏有精华博客也有吊儿郎当的CV大法文章,所以决定将自己所学所用所整理的知识分享给大家,主要还是想为了后浪们少走些弯路,多些正能量的博客,如有错漏,欢迎指正,仅希望大家能在我的博客中学到知识,解决到问题,那么就足够了。谢谢大家!(转载请注明原文出处)