作者:千锋一一哥
前言
从本章节开始,一一哥 会给各位讲解一个很常见也很重要的知识点,就是单点登录!现在的大型分布式项目,基本都会考虑实现单点登录,而且现在网上也有很多单点登录的实现方案、开源项目,但是针对单点登录的实现原理,讲解的并不是很细。你可以参考其他开源案例项目,再结合本系列文章,就可以对单点登录有较为深入的认识。
如果你对单点登录是什么也不知道,那就先看本文,了解单点登录的含义吧。
一. 单点登录
- 产生背景
很早的时候,一家公司里可能只有一个Server,后来慢慢的Server开始变多了,而每个Server都要进行注册登录,退出的时候又要一个个退出,用户体验很不好!
比如,我们想访问百度系列,要登录百度知道、百度新闻、百度贴吧、百度图册…百度旗下的每一个产品,我们都分别注册一次账号,都分别登陆一次,都分别退出登录,这样一个一个Server去操作,可能会让人抓狂。
那么有没有办法,优化这样的登录体验呢?比如:一个公司名下的任意服务只需一次注册,登录的时候只要一次登录,退出的时候只要一次退出。如果可以实现这样的需求,用户体验是不是会有很大的提升?那么该用什么实现呢?
- 多系统中的登录实现方案
想在多系统项目中实现登录,目前有2种可行的实现方案:
同域名下共享Cookie
单点登录 - 共享Cookie方案的缺陷
虽然同域名下共享Cookie的方式,可以在一定程度上解决多系统中的登录问题,但是该方案存在众多局限性,如下:
应用的群域名必须统一;
应用群中各系统使用的Web技术(至少是Web服务器)要相同,否则cookie中key的名称(Tomcat为JSESSIONID)不同,无法维持会话;
共享Cookie的方式无法实现跨语言技术平台登录,比如无法在Java、PHP、.Net等之间共享Cookie;
Cookie本身也不安全。 - SSO的概念
单点登录(Single Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO是指在多应用系统中,用户只需要在某一个应用上登录一次,就可以同时在所有相关又