关于 SSO 单点登录中,单点退出以及某一系统切换了登录用户,其他子系统也一并切换为这个用户。

有一个问题是,我现在实现了单点登录,那么单点退出如何实现让全部子系统都退出,A 系统退出登录并重定向至 SSO 登录页面,那么这时候 B 系统本地还存在 Cookie,这个其实也简单,服务端的凭证存到 Redis 中,退出登录是需要删除 Redis 中凭证的,当 B 系统进行操作时中间件判断 Redis 中不存在该用户登录凭证了则返回登录失效错误码重定向至登录页。

那么还有一个场景是A系统登录了,B系统也登录了,这时候 A 系统退出登录重定向至 SSO 登录,并切换了一个用户登录,然后 B 系统本地还是 老的 cookie,然后验证的时候服务器返回了登录失效错误码重定向了登录页。

这种情况如何让 B 系统自动的将本地 cookie 换成刚刚 A 系统切换掉的那个用户。

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

针对第一个场景,我觉得AB共享redis的方案不是很合理,这意味着架构上产生了耦合,我目前的方案是在sso登录的时候ticket在验证完成之后作为会话凭据,注销登录时在sso中心注销该凭据,A\B系统每次鉴权时通过接口去验证这个凭据是否有效。

针对第二个场景,我的做法是在上面方案的基础上,鉴权失败后B项目的页面会被重定向到SSO的一个中间跳转页,比如:http://sso.xxx.com/app_key=xxxx&redirect_url=xxxxx ,然后sso确认app_key和redirect_url合法后,会跳转至redirect_url并且在url中携带一个上面所说的ticket,这个ticket会被B的后端用来向sso的后端验证凭据,验证成功后B项目设置自己的登录态就可以了。

2年前 评论
邢闯洋 (楼主) 2年前
讨论数量: 2

A系统推出时,向SSO发送一个推出登录的消息,并抓发给其他单点登录的系统 其他单点登录的系统,接收到消息后。退出当前用户的的登录

2年前 评论

针对第一个场景,我觉得AB共享redis的方案不是很合理,这意味着架构上产生了耦合,我目前的方案是在sso登录的时候ticket在验证完成之后作为会话凭据,注销登录时在sso中心注销该凭据,A\B系统每次鉴权时通过接口去验证这个凭据是否有效。

针对第二个场景,我的做法是在上面方案的基础上,鉴权失败后B项目的页面会被重定向到SSO的一个中间跳转页,比如:http://sso.xxx.com/app_key=xxxx&redirect_url=xxxxx ,然后sso确认app_key和redirect_url合法后,会跳转至redirect_url并且在url中携带一个上面所说的ticket,这个ticket会被B的后端用来向sso的后端验证凭据,验证成功后B项目设置自己的登录态就可以了。

2年前 评论
邢闯洋 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!