Single Sign On(SSO)单点登录系统
单点登录系统原理和实现
全称Single Sign On(SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分
-
问题引出:web应用采用browser/server架构,http协议,且http是无状态协议。因此需要通过用户附加 请求参数 或 cookie 建立BS的会话机制,以此来维护客户端的登录状态。但在今天web应用集群化部署的时代,出现很多问题,如集群技术不同(Servlet、node、Django),跨语言(java、php、.net、python),跨域、cookie本身不安全等。
当然,可以通过父域名cookie来实现解决(如*.baidu.com),原理是根据cookie的作用域特点,将domain设为父域,则子域可以访问父域中的cookie,简单但不支持跨主域;还可以用单点登录验证技术。
-
核心原理:有一个登录验证集群(sso认证中心),专门用于提供登录验证服务。用户第一次访问,业务集群发现未登录向登录验证集群查询,若登录验证集群发现该用户在其他业务产品已经登录了,就将那个已有登录记录的token返回给该业务集群,否则新建一个token返回,最后让其建立局部session。
-
实现:明白原理后可以自己实现,或者选用一些已有的解决方案,如开源的轻量级分布式单点登录框架XXL-SSO(大众点评工程师XXL个人开发,没有做安全控制,可以做参考),企业级的开源框架有Apereo CAS。