Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析

Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析

在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security 、Spring Security Oauth2 等权限、认证相关的内容、原理及设计学习并整理一遍。本系列文章就是在学习的过程中加强印象和理解所撰写的,如有侵权请告知。
项目环境:
JDK1.8
Spring boot 2.x
Spring Security 5.x

单点登录(Single Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。 SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 单点登陆本质上也是OAuth2的使用,所以其开发依赖于授权认证服务,如果不清楚的可以看我的上一篇文章。

一、 单点登陆 Demo开发

从单点登陆的定义上来看就知道我们需要新建个应用程序,我把它命名为 security-sso-client。接下的开发就在这个应用程序上了。

一、Maven 依赖

主要依赖 spring-boot-starter-security、spring-security-oauth2-autoconfigure、spring-security-oauth2 这3个。其中 spring-security-oauth2-autoconfigure 是Spring Boot 2.X 才有的。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><<img src="https://github.com/BUG9/spring-security/network/alert/pom.xml/org.springframework.security.oauth:spring-security-oauth2/open--><version>2.3.5.RELEASE</version></dependency>" style="margin: auto" />
二、单点配置 @EnableOAuth2Sso

单点的基础配置引入是依赖 @EnableOAuth2Sso 实现的,在Spring Boot 2.x 及以上版本 的 @EnableOAuth2Sso 是在 spring-security-oauth2-autoconfigure 依赖里的。我这里简单配置了一下:

@Configuration
@EnableOAuth2Sso
public class ClientSecurityConfig extends WebSecurityConfigurerAdapter {@Overridepublic void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/","/error","/login").permitAll().anyRequest().authenticated().and().csrf().disable();}
} 

因为单点期间可能存在某些问题,会重定向到 /error ,所以我们把 /error 设置成无权限访问。

三、测试接口及页面
测试接口
@RestController
@Slf4j
public class TestController {@GetMapping("/client/{clientId}")public String getClient(@PathVariable String clientId) {return clientId;}

} 
测试页面
 <<img src="http://localhost:8091/client/1">跳转到OSS-client-1</a><a href="http://localhost:8092/client/2">跳转到OSS-client-2</a></body></html>" style="margin: auto" />
四、单点配置文件配置授权信息

由于我们要测试多应用间的单点,所以我们至少需要2个单点客户端,我这边通过Spring Boot 的多环境配置实现。

application.yml
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring SecurityJWTJSON Web Token)是两个不同的概念和技术,但可以结合使用来实现单点登录。 Spring Security是一个强大的身份验证和访问控制框架,用于保护应用程序的安全性。它提供了一组功能丰富的工具和库,用于处理认证、授权和安全配置等方面的任务。 JWT是一种用于在网络应用中传递信息的开放标准(RFC 7519)。它由三部分组成:头部、载荷和签名。头部包含有关生成和验证JWT的元数据,载荷包含有关用户或其他实体的信息,签名用于验证JWT的完整性。 单点登录(SSO)是一种身份验证机制,允许用户使用一组凭据(例如用户名和密码)登录到一个系统后,即可无需再次输入凭据即可访问其他系统。 要实现基于Spring SecurityJWT单点登录,可以遵循以下步骤: 1. 用户成功登录到主系统(例如系统A),该系统生成并返回一个JWT给用户。 2. 用户尝试访问其他受保护的系统(例如系统B)时,在请求中包含JWT。 3. 系统B接收到请求后,使用公钥验证JWT的签名,并解析出用户信息。 4. 如果JWT验证成功且用户有权限访问系统B,则允许用户访问系统B。 需要注意的是,要实现真正的单点登录,还需要一个中心化的身份验证系统(例如OAuth2认证服务器),用于生成和验证JWT,并为不同的系统颁发相同的JWT。 此外,还可以使用Spring Security提供的一些配置来简化JWT的集成,例如自定义认证过滤器、授权管理器和认证提供者等。 总结起来,Spring SecurityJWT可以结合使用来实现单点登录。Spring Security负责处理认证和授权,JWT用于传递用户信息和验证用户身份。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值