JeeSite与TopIAM整合实现单点登录(SSO)的技术探讨

news2024/9/17 8:33:13

一、引言

在现今的企业级应用系统中,随着业务的发展和系统的复杂化,单点登录(Single Sign-On,简称SSO)已成为提升用户体验、增强系统安全性的重要手段。JeeSite作为一个高效、高性能、强安全性的Java EE快速开发平台,与TopIAM这一开源的IDaaS/IAM平台结合,能够为企业提供强大的单点登录功能,简化用户认证流程,提高系统安全性。本文将探讨JeeSite与TopIAM整合实现单点登录的技术细节和优势。

二、JeeSite平台概述

JeeSite是一个基于Spring Boot、Shiro、MyBatis等优秀开源项目的Java EE快速开发平台。它提供了丰富的功能组件和在线代码生成工具,支持Spring Cloud架构,适用于企业、市政、信息化等领域的二次开发。JeeSite以其核心小而精、技术先进、安全稳定等特点,在业界拥有广泛的应用和良好的口碑。

图片

三、TopIAM平台概述

TopIAM是一个开源的IDaaS/IAM平台,专注于管理企业内员工账号、权限、身份认证和应用访问。它支持OAuth2.x、OIDC、SAML2.0、JWT、CAS等多种SSO标准协议,提供用户全生命周期管理、统一认证和单点登录功能。TopIAM以其强大的功能和灵活的扩展性,为企业提供了一站式解决方案,帮助企业实现数字身份安全管控。

图片

四、JeeSite与TopIAM整合实现单点登录

  1. 整合思路

JeeSite与TopIAM整合实现单点登录,主要涉及到用户认证信息的传递和共享。在整合过程中,我们需要将JeeSite的用户认证信息传递给TopIAM进行统一认证管理,同时确保在用户访问其他系统时能够实现单点登录。

  1. 整合步骤

(1)配置JeeSite的认证方式

在JeeSite中,我们需要配置使用TopIAM作为认证服务器。这通常涉及到修改JeeSite的配置文件,指定认证服务器的地址和回调地址等参数。

(2)自定义Realm

在Shiro安全框架中,Realm是安全数据源,用于收集用户的认证信息和授权信息。为了实现与TopIAM的整合,我们需要自定义Realm,从TopIAM获取用户的认证信息和授权信息。

(3)配置Filter

为了实现单点登录和单点退出功能,我们需要在JeeSite中配置相应的Filter。例如,配置LogoutFilter用于处理用户退出操作,将退出请求传递给TopIAM;配置CasFilter用于接收TopIAM的验证结果并进行处理。

(4)调整用户认证流程

在整合过程中,我们需要调整JeeSite的用户认证流程。当用户访问JeeSite系统时,如果未登录,则重定向到TopIAM的登录页面进行登录。登录成功后,TopIAM将用户的认证信息传递给JeeSite,并在用户访问其他系统时实现单点登录。

  1. 整合优势

(1)提高用户体验:用户只需在TopIAM平台进行一次登录,即可访问所有整合的系统,无需重复输入用户名和密码。

(2)增强系统安全性:TopIAM提供了统一的身份认证和授权管理功能,能够有效防止未经授权的访问和数据泄露。

(3)降低开发成本:JeeSite与TopIAM的整合基于开源项目,降低了开发成本和维护成本。

五、结论

JeeSite与TopIAM整合实现单点登录,能够为企业带来诸多优势。通过整合,企业可以简化用户认证流程、提高系统安全性、降低开发成本。同时,这种整合方式也为企业提供了更多的灵活性和可扩展性,有助于企业应对未来业务发展和系统升级的挑战。

项目地址:

https://gitee.com/thinkgem/jeesite-topiam

集成步骤

TopIAM 配置

  1. 新增OIDC应用

图片

图片

  1. 配置OIDC应用

  • 进入[应用配置]-[基本信息],获取 客户端 ID 和 客户端秘钥。

图片

  • 进入[应用配置]-[登录访问]-[单点登录],配置 登录 Redirect URI 并更改授权范围为全员可访问,方便整合测试。

图片

  • 进入[应用配置]-[登录访问]-[单点登录],在页面对下方展开[应用配置信息]获取授权端点地址。

图片

JeeSite 配置

  1. 克隆本仓库源码,并添加到项目modules中,并在modules模块pom.xml中进行引入

图片

 

<modules>
<module>core</module>
<module>cms</module>
<module>app</module>
<!-- 引入topiam模块 -->
<module>topiam</module>
</modules>

  1. 实现 TopIamOauth2Service 接口,并实现getSysUserCode方法,在模块实例中,我们内置了MockTopIamOauth2ServiceImpl实现类来模拟登录过程。

  2. web模块配置TopIamOauth2Service接口实现类,为方便入门,你可以配置默认MockTopIamOauth2ServiceImpl实现查看效果。

 

import com.jeesite.modules.topiam.service.TopIamOauth2Service;

/**
* topiam 配置
*
* @author SanLi
* Created by support@topiam.cn on 2023/8/30 21:52
*/
@Configuration
public class TopIamConfiguration {

/**
* TopIamOauth2Service
*
* @return {@link TopIamOauth2Service}
*/
@Bean
public TopIamOauth2Service topIamOauth2Service() {
return new MockTopIamOauth2ServiceImpl();
}
}

  1. 配置参数,在web模块/src/main/resources/config下找到application.yml文件,进行如下配置,并将${}内的内容改为TOPIAM配置步骤内获取的实际内容。

 

oauth2:
# TOPIAM
topiam:
clientId: ${client_id}
clientSecret: ${client_secret}
serverUrl: ${base_server_url}/api/v1/authorize/1xr4ngyqvd8qnze0oxbn2uquazbmxmb6
redirectUri: ${base_redirect_uri}/js/oauth2/callback/topiam
className: com.jeesite.modules.topiam.oauth.realm.request.AuthTopIamRequest

  • clientId:对应 TOPIAM 配置客户端ID

  • clientSecret:对应 TOPIAM 配置客户端秘钥

  • serverUrl:对应 TOPIAM 授权端点地址

  • redirectUri:对应 TOPIAM 登录 Redirect URI

测试

社区版集成,前端入口需要自己配置,为方便测试,大家可直接发起接口访问进行测试,此时用户登录将跳转TOPIAM门户端,登陆成功后回调到JeeSite完成登录。

接口地址:https://127.0.0.1:8980/js/oauth2/login/topiam

参考文档

  • https://eiam.topiam.cn/docs/application/oidc/overview/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1918496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zookeeper加入开机启动项

Windows的任务计划程序&#xff08;Task Scheduler&#xff09;是一个强大的工具&#xff0c;允许你安排程序在特定时间自动运行&#xff0c;包括开机时。 打开任务计划程序&#xff1a; 按下Win R键&#xff0c;打开“运行”对话框。输入taskschd.msc并回车&#xff0c;打开…

使用Docker制作python项目镜像

各docker桌面版本集合&#xff1a;如果提示新版本系统不支持&#xff0c;可下载旧版本 我也分享在下面。 链接: https://pan.baidu.com/s/1HvaO2wOIE3pNE0bM7Qm3sA?pwdg7ky 提取码: g7ky –来自百度网盘超级会员v2的分享 来源参考&#xff1a;https://zhuanlan.zhihu.com/p/65…

前端 js 单引号,双引号、斜杠, 表格 tr input、checkbox、、、、

直接上代码 var target (leftOrRight LEFT ? $("#left") : $("#right"));target.empty();// let tbody $("resultRight tbody");// tbody.empty();for (var i 0; i < items.length; i) {debugger// target.append("<option valu…

超纯水除硼 ,芯片专用超纯水硼的去除方法

硼在元素周期表里面是五号元素&#xff0c;是IIIA族中唯一 一个非金属元素。它是制造P型半导体的主要掺杂剂&#xff0c;基材中硼的含量直接影响半导体的极限电压&#xff0c;因此要严格控制基材中硼的含量。在半导体制造的过程中&#xff0c;水、气、化直接跟产品接触&#xf…

「51媒体」能否提供一份成功邀约媒体的技巧?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传加速季&#xff0c;100万补贴享不停&#xff0c;一手媒体资源&#xff0c;全国100城线下落地执行。详情请联系胡老师。 成功邀约媒体的技巧涉及多个方面&#xff0c;包括了解媒体…

MongoDB教程(二):mongoDB引用shell

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、MongoD…

MessageBox与HubSpot:企业沟通与客户管理的双重利器

今天咱们来聊聊两个超实用的工具——MessageBox和HubSpot。它们就像是你的超级助手&#xff0c;让你和客户沟通起来更顺畅&#xff0c;管理起来也更轻松。 先说说MessageBox吧 想象一下&#xff0c;你正在忙着工作&#xff0c;突然客户发来个消息&#xff0c;你嗖的一下就收到…

拉卡拉支付 Go SDK

最近有一个需求&#xff0c;需要用到拉卡拉的支付&#xff0c;然后秉着开源精神去网上找到了 github.com/go-pay/gopay 一个支付的库&#xff0c;等到我使用的时候却发现拉卡拉的实现是 国外的接口&#xff0c;&#x1f602;&#x1f602;&#x1f602;。 无奈之下&#xff0c…

NFS服务器、autofs自动挂载综合实验

综合实验 现有主机 node01 和 node02&#xff0c;完成如下需求&#xff1a; 1、在 node01 主机上提供 DNS 和 WEB 服务 2、dns 服务提供本实验所有主机名解析 3、web服务提供 www.rhce.com 虚拟主机 4、该虚拟主机的documentroot目录在 /nfs/rhce 目录 5、该目录由 node02 主机…

【Linux网络】IP协议{初识/报头/分片/网段划分/子网掩码/私网公网IP/认识网络世界/路由表}

文章目录 1.入门了解2.认识报头3.认识网段4.路由跳转相关指令路由 该文诸多理解参考文章&#xff1a;好文&#xff01; 1.入门了解 用户需求&#xff1a;将我的数据可靠的跨网络从A主机送到B主机 传输层TCP&#xff1a;由各种方法&#xff08;流量控制/超时重传/滑动窗口/拥塞…

【IOS】React Native之HelloWorld

RN搭建开发环境 rvm 安装3.2.2 brew install node18 brew install watchman# 使用nrm工具切换淘宝源 npx nrm use taobao# 如果之后需要切换回官方源可使用 npx nrm use npmnpm install -g yarnbrew install cocoapodsnpm uninstall -g react-native-cli react-native-communi…

Ajax从零到实战

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

RK3568笔记三十三: helloworld 驱动测试

若该文为原创文章&#xff0c;转载请注明原文出处。 报着学习态度&#xff0c;接下来学习驱动是如何使用的&#xff0c;从简单的helloworld驱动学习起。 开始编写第一个驱动程序—helloworld 驱动。 一、环境 1、开发板&#xff1a;正点原子的ATK-DLRK3568 2、系统&#xf…

Spring源码二十二:Bean实例化流程五

上一篇Spring源码二十一&#xff1a;Bean实例化流程四&#xff0c;咱们主要分析里createBeanInstance方法Spring给我们提供给的FactoryMethod方法&#xff0c;举例说明了factoryMethod属性如何使用&#xff0c;同时简单讨论了具体实现逻辑。 这一篇咱们将进入反射实例化Bean&am…

JavaEE初阶-网络原理2

文章目录 前言一、TCP报头结构二、TCP的十个核心机制2.1 确认应答2.2 超时重传2.3 连接管理2.3.1 建立连接&#xff1a;三次握手2.3.2 断开连接&#xff1a;四次挥手. 2.4 滑动窗口2.5 流量控制2.6 拥塞控制2.7 延时应答2.8 捎带应答2.9 面向字节流2.10 异常情况2.11 补充 前言…

OpenCV漫水填充函数floodFill函数的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 功能描述 ffloodFill函数是OpenCV库中用于图像处理的一个功能&#xff0c;它用于填充与种子点颜色相近的连通区域。这个函数在很多场景下都非常有用&#x…

基于 BERT 的非结构化领域文本知识抽取

文章目录 题目摘要方法实验 题目 食品测试的大型语言模型 论文地址&#xff1a;https://arxiv.org/abs/2103.00728 摘要 随着知识图谱技术的发展和商业应用的普及&#xff0c;从各类非结构化领域文本中提取出知识图谱实体及关系数据的需求日益增加。这使得针对领域文本的自动化…

MySQL学习(9):多表查询

1.多表关系 1.1一对多 1.2多对多 1.3一对一 设置外键唯一&#xff0c;是为了让两张表的数据一一对应 2.多表查询 2.1多表查询案例 现有父表&#xff08;dept&#xff09;如下&#xff1a; 子表&#xff08;emp&#xff09;如下&#xff1a; 让子表的dept_id作为外键与主表的…

重要文件放u盘还是硬盘?硬盘和u盘哪个适合长期存储

在数字时代&#xff0c;我们每天都会处理大量的文件。其中&#xff0c;不乏一些对我们而言至关重要的文件&#xff0c;如家庭照片、工作文档、财务记录等。面对这些重要文件的存储问题&#xff0c;我们通常会面临&#xff1a;“重要文件放U盘还是硬盘”、“硬盘和U盘哪个适合长…

辐射神经场算法——Instant-NGP / Mipi-NeRF 360 / 3D Gaussian Splatting

辐射神经场算法——Instant-NGP / Mipi-NeRF 360 / 3D Gaussian Splatting 1. Instant-NGP1. MultiResolution Hash Encoding1.2 Accelerated Ray Marching1.3 实验结果 2. Mip-NeRF 3602.1 场景参数化2.2 在线蒸馏2.3 失真正则化2.4 实验结果 3. 3D Gaussian Splatting3.1 Dif…