总结:单点登录SSO

2024-04-23 13:52
文章标签 总结 登录 单点 sso

本文主要是介绍总结:单点登录SSO,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、SSO原理

单点登录(Single Sign-On,简称 SSO)是一种用户鉴权过程,允许用户在多个应用系统中使用单一的登录凭证(通常是用户名和密码)进行访问。它的基本原理是创建一种中央鉴权机制,用户登录一次后,无需在其他系统中再次进行身份验证即可访问这些系统的资源。以下是单点登录的核心原理和步骤:

  1. 鉴权中心:SSO 解决方案通常设有一个中央鉴权服务器(也称为身份提供者,Identity Provider,IdP),它负责管理用户身份和凭证。

  2. 服务提供者:连接到 SSO 的应用系统被称为服务提供者(Service Providers,SP)。用户希望通过 SSO 访问的每个应用程序都是服务提供者。

  3. 首次登录和鉴权:当用户第一次尝试访问某个服务提供者应用程序时,如果没有经过身份验证,应用程序会将用户重定向到鉴权中心。

  4. 认证和凭证:在鉴权中心,用户需要提供登录凭证(如用户名和密码)。如凭证正确,鉴权中心会创建一个登录会话,并生成一个令牌(Token)或票据(Ticket),这通常包含一个断言,表明用户已经被验证。

  5. SSO Cookie 或会话:鉴权中心创建后的 SSO 会话可以通过设置浏览器的 Cookie 或其他会话管理机制来保持。当用户再次访问任何服务提供者时,这个 Cookie 或会话就可以用来证明用户的身份无需再次登录。

  6. 断言和访问令牌:鉴权中心向用户浏览器提供一个包含用户身份断言的安全令牌,用户浏览器随后将该断言令牌提交给服务提供者。

  7. 信任关系和令牌验证:服务提供者依靠事先建立的信任关系,验证来自鉴权中心的断言和令牌。验证成功后,根据断言提供的信息,SP 会给用户授予权限和访问资源的能力。

  8. 后续访问:用户后续在访问其他 SP 应用时,由于已经有鉴权中心的会话,用户可以自动登录,连续流畅地访问其他系统,无需重复输入登录凭证。

单点登录的关键优势在于提升了用户的体验,因为用户只需要记住并使用一套登录凭证。此外,SSO 还可以提升安全性,因为用户凭证由一个中心系统统一管理,且用户交互次数减少了凭证被盗取的风险。然而,单点登录也增加了安全性的挑战,因为一旦鉴权中心被攻破,所有连接的系统都可能受到影响。因此,部署 SSO 解决方案时必须考虑到适当的安全措施。

二、SSO方案有哪些

方案一:OAuth 2.0 / OpenID Connect:

如果使用 OAuth 2.0 或 OpenID Connect(通常由身份供应商如 Auth0、Okta、Keycloak 等提供支持):

  1. 添加相应的依赖到你的 pom.xml 或 build.gradle 文件。
  2. 配置安全性(安全上下文、认证管理器、用户详细信息服务等)。
  3. 使用 @EnableOAuth2Sso 或 @EnableOAuth2Client 注解启用 OAuth2 SSO 支持。
  4. 配置 application.properties 或 application.yml 文件,设置 SSO 服务器的详情、客户端ID、密钥等。
    spring:security:oauth2:client:registration:my-client:clientId: client-idclientSecret: client-secretclientName: Client NameclientAuthenticationMethod: basicauthorizationGrantType: authorization_coderedirectUri: "{baseUrl}/login/oauth2/code/{registrationId}"scope:- openid- profile- emailprovider: oidc-providerprovider:oidc-provider:authorizationUri: https://oidc-provider.com/authtokenUri: https://oidc-provider.com/tokenuserInfoUri: https://oidc-provider.com/userinfouserNameAttribute: sub
  5. 实现一个自定义的 OAuth2UserService 或 UserDetailsService 来加载用户详情。
方案二:SAML 2.0:

对于使用 SAML 2.0 的 SSO:

  1. 添加 Spring Security SAML 或类似的库(可能需要额外配置)。
  2. 创建 SAML Security 配置类并配置 SAML 2.0 的提供者、服务提供者的实体ID等。
  3. 配置传入和传出的请求的处理方式。
  4. 设置用来加载用户信息的服务。
方案三:CAS (Central Authentication Service):

如果使用 CAS 作为 SSO 服务器:

  1. 添加 Spring Security CAS 的依赖和其他必要的 CAS 客户端库。
  2. 配置安全性,包括 ServiceAuthenticationDetailsSource 和 CasAuthenticationProvider
  3. 设置你的 Spring Security 配置,加入 CAS 针对的 Filter 和 EntryPoint
  4. 配置 application.properties 或 application.yml 以连接到 CAS 服务器。

对接 SSO 的具体步骤和细节根据具体的 SSO 解决方案和服务提供商而有所不同。通常,它需要基于 SSO 服务器的配置生成和交换认证令牌、设置安全配置和认证过滤器,并可能需要为应用程序用户创建本地账户、同步用户账户信息、管理用户会话等。此外,SSO 集成常常涉及到对组织内部的安全策略和用户管理流程有深入的理解。

在进行 SSO 集成时,你需要仔细阅读和遵循所选 SSO 解决方案的官方文档,确保所有步骤都能正确完成。

这篇关于总结:单点登录SSO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/928975

相关文章

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

90%的人第一步就错了! 顺利登录wifi路由器后台的技巧

《90%的人第一步就错了!顺利登录wifi路由器后台的技巧》登录Wi-Fi路由器,其实就是进入它的后台管理页面,很多朋友不知道该怎么进入路由器后台设置,感兴趣的朋友可以花3分钟了解一下... 你是不是也遇到过这种情况:家里网速突然变慢、想改WiFi密码却不知道从哪进路由器、新装宽带后完全不知道怎么设置?别慌

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Spring Security重写AuthenticationManager实现账号密码登录或者手机号码登录

《SpringSecurity重写AuthenticationManager实现账号密码登录或者手机号码登录》本文主要介绍了SpringSecurity重写AuthenticationManage... 目录一、创建自定义认证提供者CustomAuthenticationProvider二、创建认证业务Us

Springboot项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R