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

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

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

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

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

针对第一个场景,我觉得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项目设置自己的登录态就可以了。

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

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

3年前 评论

针对第一个场景,我觉得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项目设置自己的登录态就可以了。

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

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