单点登录SSO-xxl-sso为例

1 功能定位

XXL-SSO 是一个分布式单点登录框架。只需要登录一次就可以访问所有相互信任的应用系统。

借助 XXL-SSO,可以快速实现分布式系统单点登录。

2 核心概念

概念
说明

SSO Server

中央认证服务,支持集群

SSO Client

接入SSO认证中心的Client应用

SSO SessionId

登录用户会话ID,SSO 登录成功为用户自动分配

SSO User

登录用户信息,与 SSO SessionId 相对应

  • (一个处于未登录态的)用户Client 端应用访问受限资源时,将会自动 redirect 到 SSO Server 进入统一登录界面;

  • 用户登录成功之后将会为用户分配 SSO SessionId 并 redirect 返回来源 Client 端应用,同时附带分配的 SSO SessionId

  • Client 端的 SSO Filter 里验证 SSO SessionId 无误,将 SSO SessionId 写入到用户浏览器 Client 端域名下 cookie 中 (以下流程为,一个已登录态的用户,want to access a limit resource)

  • SSO Filter 验证 SSO SessionId 通过,受限资源请求放行

4 注销流程剖析

  • 用户与 Client 端应用请求注销 Path 时,将会 redirect 到 SSO Server 自动销毁全局 SSO SessionId,实现全局销毁

  • 然后,访问接入 SSO 保护的任意 Client 端应用时,SSO Filter 均会拦截请求并 redirect 到 SSO Server 的统一登录界面

5 基于Token,相关概念

  • 登录凭证存储:登录成功后,获取到登录凭证(xxl_sso_sessionid=xxx),需要主动存储,如存储在 localStorage、Sqlite 中

  • Client 端校验登录状态:后端应用会通过校验 request Header 参数中的是否包含用户登录凭证(xxl_sso_sessionid=xxx)判断;因此,前端发送请求时需要在 Header 参数中设置登陆凭证 token

  • 系统角色模型:

    • SSO Server:认证中心,提供用户登录、注销以及登录状态校验等功能;

    • Client 应用:受 SSO 保护的 Client 端 Web 应用,为用户请求提供接口服务;

    • 用户:发起请求的用户,如使用 Android、IOS、桌面客户端等请求访问;

6 未登录状态请求处理

基于Cookie,未登录状态请求:

  • 页面请求:redirect 到SSO Server登录界面

  • JSON请求:返回未登录的JSON格式响应数据

    • 数据格式:

基于Token,未登录状态请求:

  • 返回未登录的 JSON 格式响应数据

    • 数据格式:

7 登录态自动延期

支持自定义登录态有效期窗口,默认24H,当登录态有效期窗口过半时,自动顺延一个周期。

8 记住我

未记住密码时,关闭浏览器则登录态失效;记住密码时,登录态自动延期(这个不叫记住密码,应该叫‘记住我’吧。就是下次直接跳进我的邮箱界面,而非登录页面并带密码黑点),在自定义延期时间的基础上,原则上可以无限延期。

9 路径排除

自定义路径排除Path,允许设置多个,且支持Ant表达式。用于排除SSO客户端不需要过滤的路径。

Last updated