单点登录

用户中台实施过程中的一些思考和总结


目录

  • 单点登录
  • 一、什么是单点登录?
  • 二、单点登录场景以及解决方案
  • 1.前端同域,后端同认证
  • 1.1 问题分析
  • 1.2 实现方案
  • 2.前端不同域,后端同认证
  • 2.1 问题分析
  • 2.2 实现方案
  • 3.前端不同域,后端不同认证
  • 3.1 问题分析
  • 3.2 实现方案
  • 总结



一、什么是单点登录?

一句话概述:在授信任的多个业务子系统中,用户只需要登录其中任意一个子系统,便可以访问所有的业务子系统。

举个栗子:我们系统有三个模块,精品商城(出售一些周边产品),整车商城(进行车辆销售)以及会员俱乐部。所谓的单点登录就是我在以上三个系统的任意一个系统登录就可以访问三个系统进行购买下单等所有必需登录才能完成的动作。


二、单点登录场景以及解决方案

前端同域:指的是多个不同的子系统部署在同一个主域名下,比如 a.domain.com,b.domain.com,c.domain,com

后端同认证:指的是不同的子系统连接认证是否登录态保存在同一个地方,一般指的是会话信息保存在同一个Redis之中。

1.前端同域,后端同认证

1.1 问题分析

1.前端的Token无法在多个业务子系统共享

2.不同业务子系统的后端Session也无法共享

1.2 实现方案

1.针对Token共享问题,可以使用共享Cookie来解决。所谓的共享Cookie,就是利用前端同域的特性,将主域名的Cookie写在二级域名下进行共享。比如在a.domain.com上登录,可以将共享信息写入父域名domian.com中,这样在访问b.domian.com以及c.domian.com时同样可以获取。

2.而后端同认证,则可以子系统均访问统一个认证中心或者同一个存储认证中心的Redis等,从而实现了Session共享。

2.前端不同域,后端同认证

2.1 问题分析

1.前端的Token无法在多个业务子系统共享

2.不同业务子系统的后端Session也无法共享

2.2 实现方案

1.由于前端不同域,那么就无法采用第一种方案来实现Token共享的问题。由于前端不同域,则一般采用跳转统一登录页面的方式来实现Token共享,流程如下图所示:

springsecurity jwt 单点登录_架构


当子系统需要判断是否登录以及获取会话信息时,前往统一的sso.login.com页面进行认证,这样也就实现了Token共享的问题。

2.服务端可采取和方案一相同方案。

3.前端不同域,后端不同认证

3.1 问题分析

1.前端的Token无法在多个业务子系统共享

2.不同业务子系统的后端Session也无法共享

3.2 实现方案

1.可采取方案二相同方案解决Token 共享问题

2.搭建会话认证服务,通过HTTP请求的方式获取会话。


总结

以上就是单点登录的一些基本概念和针对不同业务场景提供的简单的解决方案,在实际开发应用中也可采用比较成熟的认证方案,类似于shiro,spring security 等框架。对应的单点注销与单点登录也就是一一对应清楚就好。