单点登录应用场景

1,473 阅读3分钟

定义/需求

单点登录(Single Sign On,简称SSO),用户只需要登录一次,就可以直接访问所有互相信任的系统。

应对难题/技术背景

  • 传统的单系统tomcat登录

    • 登录时,将用户信息保存在session对象
    • 退出时,从session中删除用户信息
  • 多个系统,session不共享

解决方案

选项内容优缺点
方案一tomcat集群,实现session全局复制影响集群性能
方案二根据请求ip,映射到同个服务器某台机器宕机,该机器保存的session丢失
方案三session数据存到redis
方案四单点登录

设计场景

场景一 自身内部子系统互相登录

前端所有具体的业务请求,都会被认证中心拦截(有些是通过 网关+鉴权服务 实现),会先判断是否登录。

如果登录成功,直接进入对应的子系统,无需再登录;

如果未登录,则跳转到登录页面。

image.png

类似 spring 微服务架构,网关统一鉴权。

场景二 当前系统被集成到第三方系统

在第三方系统,点击按钮,跳转到当前系统。

image.png

场景三 独立认证中心管理多系统登录

最典型、最常用

登录流程

系统1登录:

  • 用户输入用户名密码提交登录申请

  • 认证中心校验用户信息,创建用户与认证中心之间的会话,称为全局会话,同时创建授权令牌

  • 认证中心带着令牌跳转会最初的请求地址(系统1)

  • 系统1拿到令牌,去认证中心校验令牌是否有效

  • 认证中心校验令牌,返回有效,注册系统1

  • 系统1使用该令牌创建与用户的会话,称为局部会话,返回受保护资源

image.png

系统2登录:

  • 用户访问系统2的受保护资源

  • 系统2发现用户未登录,跳转至认证中心,并将自己的地址作为参数

  • 认证中心发现用户已登录,跳转回系统2的地址,并附上令牌

  • 系统2拿到令牌,去认证中心校验令牌是否有效

  • 认证中心校验令牌,返回有效,注册系统2

  • 系统2使用该令牌创建与用户的局部会话,返回受保护资源

未登录流程

校验未登录、token过期的处理流程如下:

  • 用户访问系统1的受保护资源,系统1发现用户未登录,跳转至认证中心,并将自己的地址作为参数

  • 认证中心发现用户未登录,将用户引导至登录页面

image.png

退出登录流程

退出登录的流程如下:

  • 客户端发起请求退出系统

  • 系统1根据用户与系统1建立的会话id拿到令牌,向认证中心发起注销请求

  • 认证中心校验令牌有效,销毁全局会话,同时取出所有用此令牌注册的系统地址

  • 认证中心向所有注册系统发起注销请求

  • 各注册系统接收认证中心的注销请求,销毁局部会话

  • 认证中心引导用户至登录页面

image.png

全局会话与局部会话有如下约束关系

  • 局部会话存在,全局会话一定存在

  • 全局会话存在,局部会话不一定存在

  • 全局会话销毁,局部会话必须销毁

场景四 第三方系统账号登录当前系统

同场景三

参考文档