前后端分离实现单点登录SSO 两种方式OAuth2与Cookie


前后端分离下单点登录实现

单点登录模式 优点 缺点
共享Cookie模式 简单方便 域名需一致;Cookie可能不安全
OAuth2.0模式 灵活安全,不受站点限制 成本稍高,需独立的认证中心

共享Cookie模式(需获取完整版

  • 首先需进入“系统管理-系统配置”菜单中的“”其他配置设置你应用部署的一级域名,设置后用户登录后将在该域名及子级域名下存储Cookie令牌accessToken用于其他站点获取接口,完整版用户详见xboot-sso项目。
  • 其他站点取出accessToken即Cookies.get("accessToken")
    前后端分离实现单点登录SSO 两种方式OAuth2与Cookie

OAuth2.0模式(原创待完善)

认证中心

  • 即通过平台的独立统一认证站点完成身份认证,其他站点通过获取Access Token完成授权以及之后的请求鉴权
    • XBoot统一认证地址: 运行前端,路由地址为/authorize,默认即 http://127.0.0.1:9999/authorize, 在线demo http://xboot.exrick.cn/authorize

单点登录流程分析示例

  • 站点1发现用户未登录时,跳转至认证中心
  • 认证中心发现用户未登录,跳转认证中心登录页面
  • 用户输入账号密码登录,前端记录认证信息保存username与站点1的clientId,后端Redis存入Access Token信息,其key为username:站点1的ClientId:Access Token,返回Access Token
  • 认证中心携带Access Token跳回站点1的回调地址
  • 站点1前端记录已登录状态,每次请求携带Access Token

  • 站点2发现用户未登录时,跳转至认证中心
  • 认证中心前端判断已授权过,前端取出记录的username与站点1的clientId
  • 认证中心调用已授权验证接口,先验证username与站点1的clientId是否在Redis中有记录,若有,则后端Redis存入新的Access Token信息,其key为username:站点2的ClientId:Access Token,返回Access Token
  • 认证中心携带Access Token跳回站点2的回调地址
  • 站点2前端记录已登录状态,每次请求携带Access Token

注销流程分析示例

  • 通过Redis失效所有以username开头的键值对即可