本文介绍如何将 RuoYi-Vue 系统与 PIGX 单点登录(SSO)集成,实现统一身份认证。集成后,用户可通过 PIGX 认证中心登录 RuoYi 系统,无需单独维护用户体系。
基于 OAuth2.0 授权码模式,通过 PIGX sys_user 表完成登录认证。建议先学习 PIGX 开放平台模式。
| 项目 | 版本 |
|---|---|
| 本章文档对应视频 | 单点登录整合 ruoyi |
| 配套源码 | https://github.com/pig-mesh/RuoYi-Vue |
| PIGX | 5.9 |
| ruoyi-vue | 3.8.1 |
详细步骤说明:
以下 SQL 需在 PIGX 数据库中执行,用于注册 RuoYi 为 OAuth2.0 客户端。
关键字段说明:
| 字段 | 值 | 说明 |
|---|---|---|
| client_id | ruoyi | 客户端标识 |
| client_secret | ruoyi | 客户端密钥 |
| authorized_grant_types | authorization_code | 授权码模式 |
| web_server_redirect_uri | http://127.0.0.1:1024/sso | RuoYi 前端回调地址 |
在 RuoYi 后端配置文件中添加以下配置:
配置项说明:
http://127.0.0.1:1024
修改 login.vue 文件,添加跳转至 PIGX 认证中心的逻辑:
修改 navbar.vue 文件,添加退出登录跳转逻辑:
完成以上配置后,即可启动项目体验单点登录功能。若需深入了解实现原理,请继续阅读下文的进阶部分。
以下内容说明 RuoYi 代码改造要点,完整源码请参考 GitHub 仓库。
创建基于授权码的自定义认证模式,需实现以下两个核心类:
用于封装授权码认证信息。
源码参考:SsoCodeAuthenticationToken.java
实现授权码认证逻辑,调用 PIGX 接口验证授权码并获取用户信息。
源码参考:SsoCodeAuthenticationProvider.java
在 Spring Security 配置中注册自定义认证提供者:
关键代码:
调整登录控制器,支持授权码登录模式:
调用链路:
创建 sso.vue 页面,用于接收 PIGX 认证中心的授权码回调。
在 router/index.js 中添加 SSO 回调路由:
在路由守卫中将 /sso 路径加入白名单,允许未登录访问:
在 api/login.js 中添加 loginBySSO 方法:
在登录页面增加"单点登录"按钮:
修改退出登录方法,清除 PIGX 认证中心的会话:
问题描述: PIGX 认证中心回调时报错 redirect_uri_mismatch
解决方案:
sys_oauth_client_details 表中的 web_server_redirect_uri 字段是否与前端回调地址一致问题描述: 授权码验证成功,但 RuoYi 系统无法获取用户信息
解决方案:
sys_user 表中是否存在对应用户问题描述: 点击退出登录后,再次访问系统无需输入密码
解决方案: