细说分布式SSO单点登录

随笔,方便以后查阅!如有不足之处,请多多指点。

1.背景

随着企业的发展,产品越来越多,形成一个体系,可能需要成套的给客户使用,客户不可能每个产品都需要登录一次,过于麻烦。
sso解决了这个麻烦,实现一处登录,处处登录。

2.实现单点登录

1.非跨域实现单点登录

a站点 a.test.com
b站点 b.test.com
c站点 c.test.com

将cookie的domain设置为.test.com,此时不同的业务站点访问一级域名相同(.test.com)的不同站点都会将cookie带上,可以通过cookie内存储的token验证用户的合法性。

	Cookie cookie = new Cookie(key, value);
	if (domain != null) {
    
    
		cookie.setDomain(domain);
	}
	cookie.setPath(path);
	cookie.setMaxAge(maxAge);
	cookie.setHttpOnly(isHttpOnly);
	response.addCookie(cookie);

2.跨域实现单点登录

  1. 用户访问A系统,业务A系统是需要登录的,但用户现在没有登录。
  2. 跳转到登录系统,SSO验证当前用户未登录,弹出用户登录页。
  3. 用户填写用户名、密码,SSO系统进行认证后,将登录状态写入SSO的session(目前多数企业用redis来做session共享),浏览器(Browser)中写入SSO域下的Cookie。
  4. SSO系统登录完成后会生成一个ST(Service Ticket),然后重定向到业务A系统,同时将ST作为参数传递给业务A系统( http://A.test.com/?token=5c286b2afed3408887d62a775c1147cf)。
  5. 业务A系统拿到ST后,从后台向SSO发送请求,验证ST是否有效。
  6. 验证通过后,业务A系统将登录状态写入session并设置业务A系统域下的Cookie。
接下来,我们再看看访问业务B系统时的流程。
  1. 用户访问业务B系统,跳转到SSO校验业务B系统是否登录。
  2. 由于SSO已经登录了,不需要重新登录认证(浏览器Browser已经存在SSO登录的cookie)。
  3. SSO生成ST,浏览器跳转到业务B系统,并将ST作为参数传递给业务B系统。
  4. B拿到ST,后台访问SSO,验证ST是否有效。
  5. 验证成功后,B将登录状态写入session,并在业务B系统的域下写入Cookie。
3.CAS单点登录的流程图

cas登录流程图
注:此文章用作记录学习,加油!!
参考文章:
1.SSO单点登录看这一篇就够了
2.https://www.jianshu.com/p/75edcc05acfd
3.https://zhuanlan.zhihu.com/p/66037342

SSO单点登录demo:
源码地址附上!!!

猜你喜欢

转载自blog.csdn.net/weixin_45582733/article/details/109588312