![fbee78805039b97a7e2a6ad4bbf7bba4.png](https://i-blog.csdnimg.cn/blog_migrate/717e57d9fbad719489ccc29be5031b59.png)
单点登录
单点登录全称:Single Sign On(SSO),是指在多系统应用群中登录其中一个系统,便可在其他所有系统中得到授权而无需再次登录。
业务介绍
- 早期单一服务器的用户认证,单点性能压力,无法扩展
![45f690687ae85371254d85b0b18d16cb.png](https://i-blog.csdnimg.cn/blog_migrate/25b93acaef1e9dc381db4100ee9736d3.jpeg)
- Web应用集群:session共享模式,解决了单点性能瓶颈,问题是,跨顶级域名无法访问,cookie中使用JSESSIONID容易被篡改,盗取
![c1e80b98ff8b1b63bf53e0eba697c55a.png](https://i-blog.csdnimg.cn/blog_migrate/bacb414c7dd5efd187cafa4ae22fa878.jpeg)
- 分布式SSO模式:解决跨域,用户身份信息独立管理,更好的分布式管理,可以自己扩展安全策略,缺点就是,认证服务器压力较大
![4e011a9c28092360503a9aaeef12cede.png](https://i-blog.csdnimg.cn/blog_migrate/bdf3774f5c305957fe3326fc940abc63.jpeg)
SSO简单流程图
![d398a8abff33cb9039c55a8aa447f95b.png](https://i-blog.csdnimg.cn/blog_migrate/5a7c53a5da9af3ddf3ef2c1114f255c2.jpeg)
SSO登录流程:
- 用户访问具体受保护的业务(就是会被拦截的业务)之前,会被拦截器所拦截,这里采用注解式拦截方法(后面说明)。
- 拦截到认证中心,认证中心只负责两件事(负责token的颁发和对token真伪的验证),如果发现用户没有登录,直接返回到登录页面引导用户进行认证
- 用户进行登录验证,认证中心调用后台数据库进行验证,验证成功,生成认证token(下面说明生成token),将token存入redis缓存中,实现用户信息的共享。带着token跳转最初的具体业务的地址,如果是带token的跳转,则将token写入Cookie中,并继续打开具体业务功能
- 用户在获取到认证后的token继续访问其他受保护的业务时,先检查Cookie中是否存在token,如果存在,则继续提交到认证中心验证,认证成功,跳转到具体业务页面
![9050c0d20c7836de427c58bb3b0947c4.png](https://i-blog.csdnimg.cn/blog_migrate/4f645e561fc37b1efbf2da7b426f2ecd.jpeg)
认证中心采取这种架构的原因(认证中心独立出来的好处):实现单点登录
用户的登录认证、用户服务 都独立出来,这么做的好处是,在将来扩展其他业务时,只需要在认证中心完成认证,即可完成具体业务功能,还有一个好处是,在分布式系统中会有多个模块,会出现跨顶级域名
(一级域名)认证,为了突破Cookie中JSESSIONID跨域不能共享的这些限制(redis 也可以实现session共享,太过繁琐),需要将认证中心完全独立出来,降低耦合,放弃session共享
的形式,而是直接采用token的形式,用户第一次认证完成后,在浏览器中定义一个token(包含用户信息),访问具体业务模块时,携带这个token,业务模块将浏览器中的token 和Redis中的token进行对比,数据一致代表认证成功,然后就可以访问具体业务,用token 代替JSESSIONID,把session舍弃,token+redis 实现
生成token
- 生成token 前先进行用户名密码的核对(数据库校验)