springboot 单点登录实现原理

简介: 【7月更文挑战第2天】单点登录(Single Sign-On,SSO)是一种用户认证方式,用户在多个应用系统中只需要登录一次,就可以访问所有相互信任的应用系统。

单点登录(Single Sign-On,SSO)是一种用户认证方式,用户在多个应用系统中只需要登录一次,就可以访问所有相互信任的应用系统。SSO 的实现原理涉及身份认证、令牌管理、会话管理等多个方面,下面将详细介绍其实现原理和常用的实现方式。

SSO 实现原理

SSO 的核心思想是通过一个统一的认证系统来管理用户的登录状态,各个应用系统通过信任该认证系统来实现用户的单点登录。常见的实现原理如下:

  1. 用户请求登录
  • 用户访问应用系统 A,需要进行身份认证。
  • 应用系统 A 将用户重定向到 SSO 认证中心。
  1. 认证中心认证
  • 用户在 SSO 认证中心进行身份认证,如输入用户名和密码。
  • SSO 认证中心验证用户身份,通过后生成一个唯一的认证凭证(如 Token)。
  1. 回调应用系统
  • SSO 认证中心将认证凭证通过 URL 回调参数的方式传递给应用系统 A。
  • 应用系统 A 接收到认证凭证后,向 SSO 认证中心验证凭证的合法性。
  1. 建立会话
  • 验证通过后,应用系统 A 为用户建立会话(如生成 Session)。
  • 应用系统 A 在用户浏览器中设置一个会话 Cookie,标识用户已登录。
  1. 访问其他系统
  • 当用户访问应用系统 B 时,应用系统 B 检查用户是否已登录。
  • 如果用户未登录,应用系统 B 将用户重定向到 SSO 认证中心。
  • SSO 认证中心检测到用户已登录,直接返回认证凭证给应用系统 B。
  • 应用系统 B 验证凭证,通过后为用户建立会话。

常用的实现方式

1. 基于 Cookie 的 SSO

  • 原理:在 SSO 认证中心认证成功后,设置一个跨域的 Cookie,标识用户已登录。各应用系统通过读取该 Cookie 来判断用户是否已登录。
  • 实现难点:跨域 Cookie 的设置和读取,需要通过反向代理等方式解决跨域问题。

2. 基于 Token 的 SSO

  • 原理:在 SSO 认证中心认证成功后,生成一个 Token 并返回给应用系统。各应用系统通过 Token 向 SSO 认证中心验证用户身份。
  • 优点:不依赖浏览器的 Cookie,适用于跨域和分布式系统。

3. 基于 OAuth2 的 SSO

  • 原理:OAuth2 是一种授权协议,用于第三方应用系统访问资源所有者的资源。SSO 可以基于 OAuth2 实现,用户在认证中心完成认证后,认证中心颁发访问令牌(Access Token),各应用系统通过令牌调用认证中心的 API 验证用户身份。
  • 优点:标准化协议,支持多种认证方式和授权模式。

示例代码

以下是基于 Spring Security 和 OAuth2 实现 SSO 的示例代码:

SSO 认证中心

配置类

java复制代码

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
        endpoints.authenticationManager(authenticationManager);
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
               .withClient("client-id")
               .secret("client-secret")
               .authorizedGrantTypes("authorization_code", "refresh_token", "password")
               .scopes("all");
    }
}

应用系统

配置类

java复制代码

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/public/**").permitAll()
            .anyRequest().authenticated();
    }
}

应用系统通过 Token 调用认证中心的 API 验证用户身份

java复制代码

@RestController
public class UserController {

    @GetMapping("/user")
    public Principal user(Principal principal) {
        return principal;
    }
}

请求流程

  1. 用户访问应用系统
  • 用户访问应用系统的受保护资源,应用系统重定向到 SSO 认证中心。
  1. 用户认证
  • 用户在 SSO 认证中心进行身份认证,认证成功后,SSO 认证中心生成授权码(Authorization Code),并重定向回应用系统。
  1. 应用系统获取令牌
  • 应用系统使用授权码向 SSO 认证中心请求访问令牌(Access Token)。
  • SSO 认证中心验证授权码,生成访问令牌,并返回给应用系统。
  1. 应用系统验证用户身份
  • 应用系统使用访问令牌请求用户信息接口,获取用户身份信息,完成用户登录。

总结

单点登录(SSO)通过统一的认证中心管理用户的登录状态,各应用系统通过信任该认证中心,实现用户只需登录一次,即可访问所有相互信任的应用系统。常用的实现方式包括基于 Cookie、基于 Token 和基于 OAuth2 等。通过合理的设计和实现,可以提升用户体验,提高系统的安全性和可维护性。

相关文章
|
NoSQL Java 测试技术
字节二面:Spring Boot Redis 可重入分布式锁实现原理?
字节二面:Spring Boot Redis 可重入分布式锁实现原理?
392 1
|
前端开发 JavaScript Java
springboot实现用户统一认证、管理(单点登录)
springboot实现用户统一认证、管理(单点登录)
|
XML 安全 Java
掌握SpringBoot单点登录精髓,一键通行多系统,轻松打造无缝用户体验新纪元!
【8月更文挑战第29天】单点登录(SSO)是一种身份认证机制,用户在多个相互信任的应用系统中只需登录一次即可访问所有系统,无需重复输入凭证。本文详细介绍如何利用Spring Security和OAuth2在SpringBoot中实现SSO,并提供示例代码。核心步骤包括:引入依赖、配置认证服务器与资源服务器、实现单点登录拦截器及完成SSO配置。通过合理配置,SSO能显著提升用户体验和系统安全性。
1253 2
|
设计模式 Java Spring
Spring Boot监听器的底层实现原理
Spring Boot监听器的底层实现原理主要基于观察者模式(也称为发布-订阅模式),这是设计模式中用于实现对象之间一对多依赖的一种常见方式。在Spring Boot中,监听器的实现依赖于Spring框架提供的事件监听机制。
600 1
|
前端开发 Java 应用服务中间件
微服务技术系列教程(14) - SpringBoot - 实现原理
微服务技术系列教程(14) - SpringBoot - 实现原理
412 0
|
存储 NoSQL 算法
搞懂单点登录SSO,基于SpringBoot+JWT实现单点登录解决方案
单点登录是目前比较流行的企业业务整合的解决方案之一。单点登录是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。例如:百度旗下有很多的产品,比如百度贴吧、百度知道、百度文库等,只要登录百度账号,在任何一个地方都是已登录状态,不需要重新登录。 单点登录是互联网应用和企业级平台中的基础组件服务。接下来就介绍单点登录的原理,并基于SpringBoot +JWT实现单点登录解决方案。
21188 2
搞懂单点登录SSO,基于SpringBoot+JWT实现单点登录解决方案
|
消息中间件 缓存 前端开发
Spring Boot自定义启动器的实现原理和实际应用场景?
Spring Boot自定义启动器的实现原理和实际应用场景?
376 0
|
前端开发 JavaScript Java
springboot实现用户统一认证、管理(单点登录)
springboot实现用户统一认证、管理(单点登录)
1250 0
|
Java Spring 容器
Spring Boot - 自动配置实现原理
Spring Boot - 自动配置实现原理
736 0
|
存储 缓存 Java
《SpringBoot系列十三》:图文精讲@Conditional条件装配实现原理
《SpringBoot系列十三》:图文精讲@Conditional条件装配实现原理
486 0
《SpringBoot系列十三》:图文精讲@Conditional条件装配实现原理

热门文章

最新文章

下一篇
开通oss服务