概念
单点登录(Singleton Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就能访问所有相互信任的应用系统。
也就是说在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录就能得到其他所有系统的信任。单点登录在大型网站中使用非常频繁,例如阿里这里的网站,在网站的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户操作繁琐,各子系统重复认证授权也十分繁琐,因此实现单点登录说到底就是解决产生和存储信任,再就是其他系统验证信任的有效性。
实现方案
方案一、Cookie
原理:实现一次登录和一次退出,session是保持登录状态关键的东西,客户端持有ID,服务端持有session,两者一起用来保持登录状态。客户端需要用ID来作为凭证,二服务端需要用session来验证ID的有效性。但是不同的服务有自己的Session,因此要想办法让各个server共用session信息
缺陷:1、Cookie不安全(可以采取Cookie加密提高安全性)
2、不能跨域免登
方案二、Token
原理:将信任关系存储在单独的SS哦系统里,也就是从客户端移到了服务端。
解决问题:1、如何高效的存储大量临时性的信任数据
2、如何防止信息传递过程被篡改
3、如何让SSO系统信任登陆系统和免登系统
解决方案:1、采用类似memcached的分布式缓存的方案,既能提供可扩展数据量的机制,也能提供高效访问。
2、采用数字签名(数字证书签名或md5等加密方式),这就需要SS哦系统返回免登URL的时候对需要验证的参数进行加密,并带上token一起返回。最后需免登陆的系统进行验证信任关系的时候,需把这个token传给SSO系统,SSO系统通过对token的验证就可以辨别信息是否被改过
3、设置白名单,也就是只有白名单上的系统才能请求信任关系,同理只有在白名单上的系统才能被免邓丽。