前后端分离实现单点登录SSO 两种方式OAuth2与Cookie
分类:
文章
•
2023-11-19 15:07:22
前后端分离下单点登录实现
单点登录模式 |
优点 |
缺点 |
共享Cookie模式 |
简单方便 |
域名需一致;Cookie可能不安全 |
OAuth2.0模式 |
灵活安全,不受站点限制 |
成本稍高,需独立的认证中心 |
- 首先需进入“系统管理-系统配置”菜单中的“”其他配置设置你应用部署的一级域名,设置后用户登录后将在该域名及子级域名下存储Cookie令牌accessToken用于其他站点获取接口,完整版用户详见xboot-sso项目。
- 其他站点取出accessToken即
Cookies.get("accessToken")
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
开头的键值对即可