当前位置:首页 > Java

java如何实现单点登录

2026-01-16 15:40:52Java

单点登录(SSO)的基本概念

单点登录是一种用户认证机制,允许用户通过一次登录访问多个相互信任的应用系统。核心原理是通过共享认证状态(如Token或Cookie)实现跨系统身份验证。

基于Token的SSO实现方案

1. 认证中心(Auth Server)

  • 用户首次登录时,认证中心验证身份并生成Token(如JWT)。
  • Token包含用户信息、有效期及签名(防篡改)。
  • 示例JWT生成代码:
    String token = JWT.create()
      .withSubject("user123")
      .withExpiresAt(new Date(System.currentTimeMillis() + 3600_000))
      .sign(Algorithm.HMAC256("secret"));

2. 应用系统(Client)

  • 应用系统拦截未认证请求,重定向到认证中心。
  • 认证中心验证Token有效性后返回用户信息。
  • 示例Token验证代码:
    JWTVerifier verifier = JWT.require(Algorithm.HMAC256("secret")).build();
    DecodedJWT decoded = verifier.verify(token);
    String userId = decoded.getSubject();

基于Cookie的SSO实现方案

1. 共享Cookie域

  • 设置Cookie的Domain为父级域名(如.example.com),子域名可共享。
  • 示例设置Cookie代码:
    Cookie cookie = new Cookie("sso_token", token);
    cookie.setDomain(".example.com");
    cookie.setPath("/");
    response.addCookie(cookie);

2. 跨域认证

  • 若域名不同,通过认证中心中转(如OAuth 2.0)。
  • 用户访问应用A时,跳转至认证中心获取授权码,再交换Token。

使用Spring Security + OAuth2实现SSO

1. 认证中心配置

@Configuration
@EnableAuthorizationServer
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter {
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
            .withClient("client1")
            .secret("secret1")
            .authorizedGrantTypes("authorization_code", "refresh_token")
            .redirectUris("http://app1.com/login/oauth2/code/sso");
    }
}

2. 资源服务器配置

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().authenticated();
    }
}

3. 客户端集成
application.properties中配置:

java如何实现单点登录

spring.security.oauth2.client.registration.sso.client-id=client1
spring.security.oauth2.client.registration.sso.client-secret=secret1
spring.security.oauth2.client.registration.sso.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.sso.redirect-uri=http://app1.com/login/oauth2/code/sso
spring.security.oauth2.client.provider.sso.issuer-uri=http://auth-server.com

安全注意事项

  • Token有效期:设置较短的过期时间,结合Refresh Token机制。
  • HTTPS:强制使用HTTPS传输Token/Cookie,防止中间人攻击。
  • 签名验证:JWT必须验证签名,避免伪造Token。

以上方案可根据实际需求选择,Token方案适合前后端分离,Cookie方案适合传统Web应用,OAuth2适合复杂跨域场景。

分享给朋友:

相关文章

如何实现vue

如何实现vue

安装 Vue.js 使用 npm 或 yarn 安装 Vue.js。确保已安装 Node.js 环境。 npm install vue # 或 yarn add vue 创建 Vue 实例 在 HT…

vue如何实现重新实现主题

vue如何实现重新实现主题

Vue 主题切换的实现方法 使用 CSS 变量动态切换主题 定义主题相关的 CSS 变量,通过修改这些变量实现主题切换。在根元素(如 :root)中定义默认主题的变量,在特定类名下定义其他主题的变量。…

vue如何实现select

vue如何实现select

Vue 实现 Select 组件的方法 在 Vue 中实现 Select 组件可以通过原生 HTML <select> 元素或使用第三方 UI 库(如 Element UI、Ant Des…

vue如何实现加减

vue如何实现加减

在 Vue 中实现加减功能 使用数据绑定和事件处理 通过 Vue 的数据绑定和事件处理机制可以轻松实现加减功能。定义一个数据变量存储数值,通过方法增减该变量。 <template>…

vue如何实现录音

vue如何实现录音

使用Web Audio API实现录音 在Vue中实现录音功能可以通过Web Audio API结合MediaRecorder API来完成。以下是一个基础实现方案: 安装必要的依赖: npm i…

vue router如何实现

vue router如何实现

Vue Router 的实现方法 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是实现 Vue Router 的具体方法: 安装 Vue Router…