单点登录SSO流程分析

  1. 用户访问网站A,需要认证登录。网站A重定向至登录站SSO(这里会走一次第五步)。

  2. 如果SSO判断用户没有登录则需要用户提交口令登录。登录成功之后在SSO站点域名下面写上关于SSOSESSION_ID Cookie 并且重定向(带上一段token)至网站A。

  3. 网站A拿到token之后去后端检查token有效性,有效则用户登录。

  4. 接下来用户访问网站B,需要认证登录,重定向到登录站SSO。

  5. SSO 检查当前域名下是否有已经登录过的Cookie 如果有直接生成token 重定向至原来的网站(否则走第二步)

  6. 接下来走第三步。

所有站点的Auth 中间件都会去SSO判断用户是否登录

如果用户退出登录,触发退出登录站点会去SSO中心注销当前用户登录信息。

这种流程方式是否有问题?还有其他方式吗?欢迎探讨、交流

SSO
面向Google编程
drinke9
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2
自由与温暖是遥不可及的梦想

我就想知道你实现了嘛

用三个项目来实现以下 你就晓得了

3年前 评论

没问题 流程就是ABC三个项目,一个 SSO 项目. a.com b.com c.com sso.com

  1. a.com/a 被访问,在中间件/拦截器/过滤器里判断未登录 ,重定向到 SSO( sso.com/login?backurl=a.com/a ),SSO判断当前用户未登录,让用户登录.
  2. SSO登录之后保存登录信息到 session ,生成一个token,写入到session,同时写入到 redis ,keytoken,valueuserid, 然后SSO 给客户端一个302响应,同时重定向到 a.com/a?token=xxxx
  3. 回到 a, Auth中间件里判断session未登录,但是 querystring 里有 token参数,根据 token查 redis 拿到userid,Auth:: loginUsingId(userid),下次访问 a 就是登录了
  4. 接下来访问 b.com/b,访问 b 浏览器只会携带domain是 b.com 的cookie,在 a 和 sso 登录就没用了,b 的中间件判断没登录, 去 sso.com/login?backurl=b.com/b
  5. 访问 sso 浏览器自动会带上 domainsso.comcookie,sso 查到 session已登录还能拿到token,直接302 b.com/b?token=xxx
  6. 重复执行3

要点是 abc,sso 访问一个 redis 服务,浏览器访问网站自动携带当前域名的 cookie

3年前 评论
Su 2年前
lchola (作者) 2年前

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