首页 > 其他分享 >Spring Security 4大核心架构图与21种安全验证策略场景分析(高级篇)

Spring Security 4大核心架构图与21种安全验证策略场景分析(高级篇)

时间:2024-10-29 16:17:26浏览次数:9  
标签:OAuth2 21 Spring 用户 认证 访问 Security 架构图

在这里插入图片描述

Spring Security 是一个功能强大且高度可定制的 Java 安全框架,用于保护基于 Spring 的应用程序。它提供全面的安全服务,包括认证、授权、防止 CSRF 攻击、会话管理等。通过灵活的配置选项和多种认证机制,Spring Security 帮助开发者构建安全、健壮的应用系统,支持从简单的表单登录到复杂的 OAuth2 和 OpenID Connect 认证。

肖哥弹架构 跟大家“弹弹” 框架注解使用,需要代码关注

欢迎 点赞,关注,评论。

关注公号Solomon肖哥弹架构获取更多精彩内容

历史热点文章

一、Spring Security 架构设计图

在这里插入图片描述

  • 用户请求: 用户发起对应用程序的请求。
  • Security Filter Chain (安全过滤器链) : 请求首先经过 Spring Security 的过滤器链。
  • 认证过程: 请求被 AuthenticationManager 处理,它委托给一个或多个 AuthenticationProvider 进行认证。
  • 认证成功/失败: 认证成功则进行授权决策,失败则由 AuthenticationEntryPoint 处理,如重定向到登录页面或返回错误响应。
  • Authorization Decision (授权决策) : AccessDecisionManager 根据 Voter 的投票结果来决定是否授权用户访问资源。
  • 访问资源: 授权成功后,用户可以访问受保护的资源。
  • 方法安全检查: 在访问方法之前,进行方法级别的安全检查,确保用户对方法具有足够的权限。
  • 执行业务逻辑: 执行应用程序的业务逻辑。
  • 返回响应给用户: 处理完业务逻辑后,将响应返回给用户。

核心组件

  • AuthenticationManager (认证管理器) : 负责整个认证过程。
  • UserDetailsService (用户服务) : 用于从数据库或其他存储中加载用户详细信息。
  • AuthenticationProvider (认证提供者) : 负责具体的认证逻辑。
  • PasswordEncoder (密码编码器) : 用于密码的编码和验证。

授权组件

  • AccessDecisionManager (访问决策管理器) : 负责做出最终的访问决策。
  • Voter (投票器) : 包括 RoleVoterPermissionVoter 等,根据用户的角色和权限进行投票

配置组件

  • Security Configuration (安全配置) : 定义了整个应用程序的安全策略,包括认证、授权和过滤器链的配置。

二、Spring Security 架构流程设计图

在这里插入图片描述

1. 初始化和配置

  • 配置类: 开发者通过创建配置类来定义安全策略。通常继承自 WebSecurityConfigurerAdapter 或实现 SecurityConfigurer 接口。
  • 依赖注入: 通过 Spring 的依赖注入机制,将自定义的安全配置注入到 Spring Security 的框架中。

2. 认证管理器(AuthenticationManager)

  • 认证请求: 当用户尝试访问受保护的资源时,Spring Security 会拦截请求并要求认证。
  • AuthenticationProvider: AuthenticationManager 通过一个或多个 AuthenticationProvider 进行认证,每个 AuthenticationProvider 负责验证不同来源的认证信息(如数据库、LDAP、OAuth2 等)。
  • 认证成功/失败: 认证成功后,用户信息被存储在 SecurityContextHolder 中;认证失败则抛出异常。

3. 授权决策管理器(AccessDecisionManager)

  • 投票器(Voter) : 一旦用户被认证,AccessDecisionManager 会根据一组 Voter 来决定用户是否有权访问特定资源。常见的 Voter 包括 RoleVoterPermissionVoter
  • 访问决策: 根据投票器的投票结果,AccessDecisionManager 决定是否授予访问权限。

4. 安全过滤器链(Security Filter Chain)

  • FilterChainProxy: 管理请求的过滤链,确保每个请求都经过一系列安全过滤器的处理。
  • HttpSecurity: 配置 URL 模式和对应的安全过滤器,如 UsernamePasswordAuthenticationFilterBasicAuthenticationFilterCsrfFilter 等。

5. 认证和授权的实现

  • UserDetailsService: 从数据库或其他存储中加载用户详细信息,通常实现 UserDetailsService 接口。
  • UserDetails: 包含用户的账号信息、密码、权限等。

6. 异常处理

  • AuthenticationEntryPoint: 处理认证失败的情况,如重定向到登录页面或返回错误响应。
  • AccessDeniedHandler: 处理授权失败的情况,如返回 403 禁止访问的响应。

7. 会话管理

  • SessionManagementConfigurer: 配置会话策略,如会话固定保护、会话超时等。

8. CSRF 保护

  • CsrfFilter: 提供跨站请求伪造保护。

9. OAuth2 和 OpenID Connect

  • OAuth2LoginConfigurer: 配置 OAuth2 登录流程,包括授权服务器和资源服务器的设置。

10. 方法安全

  • @PreAuthorize, @Secured: 保护方法级别的安全性,使用注解来限制方法访问。

三、Spring Security 4大架构模块图

在这里插入图片描述

  • OAuth2模块:

    • OAuth2 Login: 表示 OAuth2 登录流程,涉及授权服务器、资源服务器和客户端应用。
    • Authorization Server: 授权服务器。
    • Resource Server: 资源服务器。
    • Client App: 客户端应用。
      在这里插入图片描述
  • 方法安全模块:

    • MethodSecurityInterceptor: 方法安全拦截器,用于保护方法调用。
    • DefaultMethodSecurityExpressionHandler: 默认方法安全表达式处理器。
    • Global Method Security Configuration: 全局方法安全配置。
      在这里插入图片描述
  • 安全过滤器链模块:

    • FilterChainProxy: 管理 Spring Security 的过滤器链。
    • SecurityFilterChain: 定义了过滤器链中的各个过滤器。
    • HttpSecurity: 用于配置 URL 模式的安全规则。
    • WebSecurityConfigurerAdapter: 允许自定义配置安全过滤器链和认证管理器。
      在这里插入图片描述
  • 授权模块:

    • AccessDecisionManager: 访问决策管理器,负责收集投票器的投票结果并做出最终的访问决策。
    • Voter: 投票器,用于访问决策。
    • RoleVoter: 角色投票器。
    • PermissionVoter: 权限投票器。
      在这里插入图片描述
  • 核心认证模块:

    • SecurityContextHolder: 持有当前的安全上下文,包括认证信息。
    • Authentication: 表示当前用户的认证信息。
    • GrantedAuthority: 用户的权限或角色。
    • AuthenticationManager: 负责整个认证过程。
    • AuthenticationProvider: 具体的认证提供者。
    • UserDetailsService: 用于从数据库或其他存储中加载用户信息。
    • UserDetails: 包含用户的账号信息、密码、权限等。

四、21种安全验证策略

在这里插入图片描述

说明
  • Spring Security: 核心安全框架,提供了一个可插拔的安全服务框架。
  • 认证方式: 包括各种认证机制,每种机制都可以通过 Spring Security 进行配置和使用。
认证方式
  • 用户名和密码认证: 传统的用户名和密码认证方式。
  • 表单认证: 通过 Web 表单提交认证信息。
  • HTTP 基本认证: 基于 HTTP 头部的简单认证机制。
  • HTTP 摘要认证: 提供了一种更加安全的认证方式,通过发送密码的哈希值而非明文。
  • LDAP 认证: 通过 LDAP 服务器进行认证。
  • OAuth2: 支持复杂的授权流程。
  • OpenID Connect: 基于 OAuth 2.0 的身份认证。
  • 客户端证书认证: 使用 SSL/TLS 证书进行认证。
  • 一次性密码认证: 一次性密码认证机制。
  • JWT 认证: 使用 JSON Web Tokens 进行无状态认证。
  • SAML 认证: 支持跨域身份认证。
  • CAS 认证: 集成中央认证服务 (CAS) 进行认证。
  • 预认证: 用于已经通过外部系统认证的情况。
  • 匿名认证: 允许匿名访问。
  • 记住我认证: 提供持久的会话管理。
  • 双因素认证: 结合两种认证因素进行认证。
  • 自定义认证: 开发者自定义的认证逻辑。
  • 方法级安全: 控制方法级别的访问权限。
  • 基于表达式的认证: 使用 Spring 表达式语言进行复杂的认证决策。
  • 基于角色的认证: 基于用户角色的访问控制。
  • 基于权限的认证: 基于用户权限的细粒度访问控制。

组合认证案例

1. 企业级应用的用户登录

需求: 需要确保只有合法用户才能访问企业资源,同时提供额外的安全层。

组合认证方式:

  • 表单认证: 用户通过填写用户名和密码登录。
  • 双因素认证: 在表单认证后,要求用户通过手机短信或电子邮件进行二次验证。

案例: 企业资源管理系统要求用户在登录时输入用户名和密码,然后通过手机接收一次性密码进行二次验证,以确保登录的安全性。

2. 金融服务平台

需求: 需要高度的安全措施来保护用户的财务信息和交易。

组合认证方式:

  • OAuth2: 使用OAuth2进行用户授权,允许第三方应用安全地访问用户数据。
  • JWT认证: 用于无状态的API认证,确保每次请求都经过验证。
  • HTTPS: 通过SSL/TLS证书保护所有通信。

案例: 一个在线银行平台使用OAuth2授权用户连接其账户到第三方金融管理应用,同时使用JWT来验证API请求,所有通信都通过HTTPS进行加密。

3. 多级访问控制的政府网站

需求: 需要对不同类型的用户(公众、注册用户、管理员)实施不同级别的访问控制。

组合认证方式:

  • 角色基础的访问控制: 根据用户的角色(如公众、注册用户、管理员)限制访问。
  • 权限基础的访问控制: 对敏感操作(如数据修改、报告生成)实施更细粒度的权限控制。
  • 记住我认证: 为频繁访问的用户提供便利性,同时确保安全性。

案例: 政府网站允许公众访问基本信息,注册用户可以访问更多服务,而管理员可以进行数据管理和配置。所有用户通过表单认证登录,管理员在执行敏感操作时需要额外的权限验证。

4. 云服务管理平台

需求: 需要确保只有拥有适当凭证的用户才能管理云资源。

组合认证方式:

  • SAML认证: 用于跨多个域的身份验证。
  • OAuth2: 用于授权用户访问特定的云服务。
  • 多因素认证: 增加安全性,要求用户在登录时提供第二种认证方式。

案例: 云服务管理平台允许企业用户通过SAML从其企业身份提供者进行身份验证,然后使用OAuth2授权访问特定的云资源,所有登录尝试都要求多因素认证。

5. 健康信息管理系统

需求: 需要确保患者信息的保密性和完整性,同时允许医疗人员快速访问。

组合认证方式:

  • LDAP认证: 用于从中央目录服务验证医疗人员身份。
  • 基于表达式的认证: 根据用户的工作角色和患者信息的敏感性动态决定访问权限。
  • HTTPS: 保护所有通信的安全。

案例: 医院的健康信息管理系统使用LDAP来验证医生和护士的身份,然后根据他们的工作角色和患者的保密要求使用基于表达式的认证来控制对患者记录的访问。所有数据传输都通过HTTPS进行加密。

标签:OAuth2,21,Spring,用户,认证,访问,Security,架构图
From: https://blog.csdn.net/alises1314/article/details/143313162

相关文章

  • springboot:调用接口返回的数据乱码解决
    从git拉下来项目后,运行服务,启动正常,但是使用swagger和postman调用服务接口出现乱码问题每一个接口返回的数据是乱码,但是控制台打印的日志都是正常的,后续发现数据的返回类型不是常见的application/json,而是application/x-jackson-smile,所以要通过改变数据类型解决问题通过在接......
  • 后台管理系统的通用权限解决方案(六)SpringBoot整合Logback实现日志记录
    1Logback介绍1.1Logback的组件由上图可知,Logback和Log4j都是slf4j规范的具体实现。在程序中直接调用Logback的API其实都是slf4j规范定义好的API,其底层则是真正的日志实现组件—Logback或者Log4j。Logback构建在三个主要的类上:Logger,Appender和Layout。这三个不同类型......
  • SpringBoot请销假管理信息系统8wz1t(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,教师,领导,在线请假,提交审批,审批信息,延假申请,在线销假,学生统计,班级统计,学院统计开题报告内容一、课题背景与意义随着教育管理的信息化发展,传统的......
  • SpringBoot琴行管理系统42jfd--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,教师,课程信息,课程类型,课程购买,课程作业,作业提交,作业批改,课程签到,财务信息开题报告内容一、研究背景与意义随着音乐教育的普及和琴行的不断增多,传......
  • SpringBoot汽车销售管理系统1cv5c--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表销售员,客户,销售订单,品牌,车系,汽车库存,汽车入库,财务报表开题报告内容一、课题背景与意义随着汽车市场的不断扩大,汽车销售管理变得日益复杂。为了提高销售......
  • 【langchain4j接入springboot项目】想学AI平台接入?langchain4j,是不二的选择
    一、项目结构二、示例代码1.Calulator.javapackageorg.ivy.aiservice.func;importdev.langchain4j.agent.tool.Tool;importorg.springframework.stereotype.Component;@ComponentpublicclassCalculator{@Tool("Calculatesthelengthofastring")......
  • leetcode-3211. 生成不含相邻零的二进制字符串
    leetcode-3211.生成不含相邻零的二进制字符串给你一个正整数n。如果一个二进制字符串x的所有长度为2的子字符串中包含至少一个"1",则称x是一个有效字符串。返回所有长度为n的有效字符串,可以以任意顺序排列。思路:所有长度为2的子字符串都包含1,也就是说,......
  • Spring Boot 3.x 整合 Druid 数据库连接池(含密码加密)
    SpringBoot3.x整合Druid数据库连接池(含密码加密)1.为什么需要数据库连接池?在传统的数据库连接中,每一次与数据库连接都会消耗大量的系统资源和时间。数据库连接池会提前创建一定数量的数据库连接保存在池中,用来复用,避免了重复建立连接和关闭连接的开销优点:**提高性......
  • SpringBoot区域特色产品营销推广平台cd554--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义在全球化与信息化交织的今天,区域特色产品作为地方文化、经济的重要载体,面临着前所未有的发展机遇与挑战。一方面,消费者对于独特......
  • SpringBoot青少年心理健康服务bpro6--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,咨询师,咨询师信息,在线咨询,预约信息,分析报告,心理测试,提交测试,测试评分开题报告内容一、课题名称青少年心理健康服务体系建设研究二、研究背景及意......