单点登录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
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 2
自由与温暖是遥不可及的梦想

我就想知道你实现了嘛

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

4年前 评论

没问题 流程就是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

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

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