1、需求分析
在《ruoyi-vue-pro数据大屏——单点登录,告别手输密码》博文中遗留了一个小遗憾:appKey, appSecret是写在前端javascript中的,虽然可以借助加解密解决,但还是觉得不安全。
2、解决方案
这篇博文就在 ruoyi-vue-pro 中新增一个通用的SSO客户端模块yudao-oauth2-sso,以实现以下目标:
1)在server端从application.yaml中配置appKey, appSecret等参数。
2)通过后端发送请求到oauth2 server进行验证,避免密码暴露。
3)提供一个通用的oauth2单点登录的模块供其他应用使用。
4)提供获取用户信息、更新用户信息的接口。
适配Scope配置中配置的两个权限 【user.read、user.write】
4)以后将yudao-module-sso应用于数据大屏
5)提供一个简单的spring-boot应用demo测试使用 yudao-oauth2-sso
3、实现步骤
1)主要配置
首先需在【系统管理->三方授权->应用管理】中配置好客户端信息,然后在demo应用的application.yaml中增加oauth2配置信息(如有必要可以进行属性加密):
server:
port: 18080
yudao:
sso:
oauth2-server: http://127.0.0.1:48080/admin-api/system/oauth2
client-key: yudao-sso-demo-by-code
client-secret: test
tenant-id: 1
2)新增yudao-module-sso模块
在 ruoyi-vue-pro下新增模块 yudao-module-sso, pom.xml中的依赖如下:
- 这里不是必须在ruoyi-vue-pro下创建这个模块,也可以直接建立 yudao-module-sso项目,名称也可以随意,因为依赖的都是开源jar, 跟yudao-framework无关。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yudao-module-sso</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
</dependencies>
</project>
详细代码见文末下载链接,免费
详细代码见文末下载链接,免费
详细代码见文末下载链接,免费
3)关键代码说明
最终代码结构

oauth 鉴权,用户数据相关的接口类

通用的controller,提供以下接口:
/sso/login-by-code(post) # code登陆oauth2 server /sso/refresh-token(post) /sso/logout(post) /sso/user(post) # 获取用户信息(部门,岗位等),需待token访问所有用post /sso/user(put) # 更新用户信息,需待token访问

4、创建Demo应用测试验证
为了方便,不破坏原来的框架代码,我这里就直接复制ruoyi-vue-pro\yudao-example\yudao-sso-demo-by-code模块为ruoyi-vue-pro\yudao-example\yudao-sso-demo-client进行简单改造。
改造点:
1)demo工程加入sso依赖
在ruoyi-vue-pro\yudao-example\yudao-sso-demo-client的pom.xml中加入yudao-module-sso依赖
,代码如下:
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-sso</artifactId>
<version>1.8.3-snapshot</version>
</dependency>
2)组件扫描中加入sso模块
在此加入 cn.iocoder.yudao.sso,cn.iocoder.yudao.module,避免bean没有实例化。
@SpringBootApplication(scanBasePackages = {"cn.iocoder.yudao.sso", "cn.iocoder.yudao.module"})
public class SSODemoApplication {
public static void main(String[] args) {
SpringApplication.run(SSODemoApplication.class, args);
}
}
3)修改SecurityConfiguration配置放行 sso 相关controller
找到src\main\java\cn\iocoder\yudao\ssodemo\framework\config\SecurityConfiguration.java文件
做如下修改:
// 2. 登录相关的接口,可匿名访问
.antMatchers("/sso/login-by-code").permitAll()
.antMatchers("/sso/refresh-token").permitAll()
.antMatchers("/sso/logout").permitAll()
// last. 兜底规则,必须认证
.and().authorizeRequests()
.anyRequest().authenticated();
这里主要是改了一下url,避免与oauth2 server中的接口冲突。
4) 导入sso模块中的 client 及辅助工具类
删除client 及 controller包,修正framework中的类导入,文件结构如下图:

5)启动server 及 sso-demo-client测试
效果如下图:

5、资源下载
通用单点登录模块yudao-module-sso及示例模块 yudao-sso-demo-client资源下载地址
============= 相关博文 ============
ruoyi-vue-pro数据大屏——单点登录,告别手输密码(适用于不带后端服务的情况)
ruoyi-vue-pro优化——如何将一个模块快速变成一个独立的应用进行开发,部署,管理
ruoyi-vue-pro增强——新增通用单点登录模块yudao-module-sso(下载链接在博文末尾)
ruoyi-vue-pro优化——让菜单支持多个参数,一键直达【经营分析】
ruoyi-vue-pro优化——模块单独打包,增量更新、部署,告别打包等待
============= 相关博文 ============

3760

被折叠的 条评论
为什么被折叠?



