# SSO 统一身份认证集成方案(前后端分离 CAS 模式) ## 一、方案概述 ### 1.1 架构设计 采用前后端分离的 CAS 单点登录模式,流程如下: ``` 用户访问 → 前端检测未登录 → 重定向到 SSO 服务端 → 用户认证 → SSO 返回票据 → 后端验证票据 → 生成本地 Token → 返回前端 → 后续请求使用本地 Token ``` ### 1.2 为什么需要生成本地 Token? **原因**: 1. **性能考虑**:只需首次验证调用 SSO 服务器,后续请求本地验证 2. **解耦考虑**:SSO 短暂故障不影响已登录用户 3. **兼容性**:与现有 RuoYi 框架的 Token 机制无缝集成 4. **灵活性**:可独立管理本系统的会话和权限 **SSO 票据 vs 本地 Token**: - SSO 票据 = 护照(跨系统通用,用于首次认证) - 本地 Token = 身份证(系统内使用,用于会话维持) --- ## 二、前端代码实现 ### 2.1 新增文件:src/api/sso.js ```javascript import request from '@/utils/request' /** * 获取 SSO 登录 URL * @param {string} redirect - 重定向地址 */ export function getSsoLoginUrl(redirect) { return request({ url: '/sso/loginUrl', method: 'get', params: { redirect }, headers: { isToken: false } }) } /** * SSO 回调处理,验证票据并登录 * @param {Object} data - 包含 ticket 等参数 */ export function ssoCallback(data) { return request({ url: '/sso/callback', method: 'post', data: data, headers: { isToken: false } }) } /** * SSO 登出 */ export function ssoLogout() { return request({ url: '/sso/logout', method: 'post' }) } ``` --- ### 2.2 新增文件:src/views/sso/login.vue ```vue ``` --- ### 2.3 新增文件:src/views/sso/callback.vue ```vue ``` --- ### 2.4 修改文件:public/static/config.js 在文件末尾添加 SSO 配置: ```javascript const MyConfig = { BASE_API: 'http://localhost:8050/gd_dataserver', FILE_BASE_URL: 'http://localhost:8050/gd_dataserver', TEMPLATE_FILE_URL: 'http://localhost:9527/asset/template', MQTTconnection: { host: "bjsdqc.cn", port: "8083", endpoint: "/mqtt", }, apk_url: "http://bjsdqc.cn:9527/asset/apk/gd_v1.7.2.apk", isFlat: false, // ========== SSO 统一身份认证配置 ========== SSO: { // 是否启用 SSO 登录(生产环境根据实际需求配置) enabled: true, // SSO 服务器基础 URL(需要根据实际 SSO 服务器地址修改) serverUrl: 'http://localhost:8080/sso', // 本地回调地址(前端自动获取当前域名) callbackUrl: window.location.origin + '/sso/callback' } } ``` --- ### 2.5 修改文件:src/views/login.vue #### (1)导入配置文件 在 `