您的位置:首页 > 汽车 > 新车 > 单点登录实现原理

单点登录实现原理

2024/7/6 9:38:49 来源:https://blog.csdn.net/qq_25580555/article/details/140169650  浏览:    关键词:单点登录实现原理

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

SSO 实现原理

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

  1. 用户请求登录

    • 用户访问应用系统 A,需要进行身份认证。
    • 应用系统 A 将用户重定向到 SSO 认证中心。
  2. 认证中心认证

    • 用户在 SSO 认证中心进行身份认证,如输入用户名和密码。
    • SSO 认证中心验证用户身份,通过后生成一个唯一的认证凭证(如 Token)。
  3. 回调应用系统

    • SSO 认证中心将认证凭证通过 URL 回调参数的方式传递给应用系统 A。
    • 应用系统 A 接收到认证凭证后,向 SSO 认证中心验证凭证的合法性。
  4. 建立会话

    • 验证通过后,应用系统 A 为用户建立会话(如生成 Session)。
    • 应用系统 A 在用户浏览器中设置一个会话 Cookie,标识用户已登录。
  5. 访问其他系统

    • 当用户访问应用系统 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 认证中心。
  2. 用户认证

    • 用户在 SSO 认证中心进行身份认证,认证成功后,SSO 认证中心生成授权码(Authorization Code),并重定向回应用系统。
  3. 应用系统获取令牌

    • 应用系统使用授权码向 SSO 认证中心请求访问令牌(Access Token)。
    • SSO 认证中心验证授权码,生成访问令牌,并返回给应用系统。
  4. 应用系统验证用户身份

    • 应用系统使用访问令牌请求用户信息接口,获取用户身份信息,完成用户登录。

总结

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com