SSO英文全称Single Sign On,单点登录;
SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

  1. 任何系统都必须去登陆服务器进行登录
  2. 服务器就记住了登录状态
  3. 其他系统访问受保护资源,需要再次登录,跳转到sso_server登录的时候,服务器告诉客户端,已经登录过,无须登录。登录过得信息

1)、单点登录框架调试
https://gitee.com/xuxueli0323/xxl-sso
http://www.xuxueli.com/xxl-sso/#/
XXL-SSO 是一个分布式单点登录框架。只需要登录一次就可以访问所有相互信任的应用系统。 拥有”轻量级、分布式、跨域、Cookie+Token均支持、Web+APP均支持”等特性。现已开放源代码,开箱即用。

2)、下载框架代码
默认规则:
单点登录服务器的地址应该是:
http://xxlssoserver.com:8080/xxl-sso-server 服务器
/8081/xxl-sso-web-sample-springboot web系统1
/8082/xxl-sso-web-sample-springboot web系统2

3)、修改各个项目中redis地址信息

4)、为系统添加以下域名映射。
域名只要不同:cookie不能共享,跨域还需配置。

127.0.0.1 xxlssoserver.com
127.0.0.1 xxlssoclient1.com
127.0.0.1 xxlssoclient2.com
4)、启动三个服务
java -jar xxl-sso-server-1.1.1-SNAPSHOT.jar
java -jar xxl-sso-web-sample-springboot-1.1.1-SNAPSHOT.jar
java -jar xxl-sso-web-sample-springboot-1.1.1-SNAPSHOT.jar –server.port=8082

5)、访问服务测试
访问 http://xxlssoclient1.com:8081/xxl-sso-web-sample-springboot/ 需要登录
访问http://xxlssoclient2.com:8082/xxl-sso-web-sample-springboot/ 需要登录
但是他们都重定向到了 http://xxlssoserver.com:8080/xxl-sso-server/ 统一认证中心
只要有一个人登录

6)、观察核心
每一个应用下都有一个相同的cookie。单点登录的核心就是不同系统之间同步cookie即可。

第一次单点登录的关键三处

  1. 认证中心拿到账号密码,查到用户,把用户保存到redis中使用的key是8c6e
  2. 认证中心把8c6e也命令浏览器保存在自己的认证中心域名对应的cookie中;
  3. 这个8c6e命令浏览器重定向到原来位置,并且保存在自己的client域名下

Client域名下和ssoserver域名都有一个同名同值的cookie

第一次单点登录

第二次没有登录的其他客户端登录

第二次登录

单点登录完整流程

完整流程

cookie实现单点登录缺点

Cookie不安全
通过加密Cookie可以保证安全性,当然这是在源代码不泄露的前提下。如果Cookie的加密算法泄露,攻击者通过伪造Cookie则可以伪造特定用户身份,这是很危险的。
浏览器禁用cookie

因为cookie实现单点登录效果不是很理想,所以本篇在于理解流程,后续将使用JWT和Oauth2.0开发授权协议实现…..