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

一、引言

在现今的企业级应用系统中,随着业务的发展和系统的复杂化,单点登录(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/

上一篇:底层软件 | STM32启动分析之main函数是怎样跑起来的


下一篇:vue3 学习笔记02 -- 配置路由router+导航守卫