单点登录(SSO)
参考文档:https://juejin.cn/post/7044328327762411534?searchId=20240918172034A3B355DF0CFBF66410FA
1 登录
用户访问系统 1 的受保护资源,系统 1 发现用户未登录,跳转至 sso 认证中心,并将自己的地址作为参数
sso 认证中心发现用户未登录,将用户引导至登录页面(带系统 1 地址)
用户输入用户名密码提交登录申请
sso认证中心校验用户信息,创建用户与sso认证中心之间的会话,称为全局会话(这时该会话信息保存到cookie中),同时创建授权令牌设置 PTokensso 认证中心带着令牌(sTokenBackendValidate)跳转到最初的请求地址(系统 1) 302 跳转
系统 1 拿到令牌,掉取后端服务,后端服务, 去 sso 认证中心校验令牌是否有效(置换 SToken)
sso 认证中心校验令牌,返回有效,注册系统 1,并给当前域名下写入 stoken
系统1使用该令牌创建与用户的会话,称为局部会话(seesion),返回受保护资源重新获取用户信息携带 token,返回用户信息
用户访问系统 2 的受保护资源
系统 2 发现用户未登录,跳转至 sso 认证中心,并将自己的
地址和之前和sso认证中心的会话cookie信息作为参数sso 认证中心发现用户已登录,跳转回系统 2 的地址,并附上令牌
系统 2 拿到令牌,去 sso 认证中心校验令牌是否有效,并给当前系统二域名下写入 stoken
系统 2 使用该令牌创建与用户的局部会话,返回受保护资源
用户登录成功之后,会与 sso 认证中心及访问的子系统建立会话,用户与 sso 认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话,局部会话建立之后,用户访问子系统受保护资源将不再通过 sso 认证中心,全局会话与局部会话有如下约束关系
2. 注销
用户向系统 1 发起注销请求
系统 1 根据用户与系统 1 建立的会话 id 拿到令牌,向 sso 认证中心发起注销请求
sso 认证中心校验令牌有效,销毁全局会话,同时取出所有用此令牌注册的系统地址
sso 认证中心向所有注册系统发起注销请求
各注册系统接收 sso 认证中心的注销请求,销毁局部会话
sso 认证中心引导用户至登录页面