spring security认证原理解析

本文探讨了SpringSecurity相较于Shiro在身份验证、授权、深度集成和社区支持等方面的优点,以及它们在不同应用场景下的适用性,重点解析了SpringSecurity的认证流程核心组件和过程。
摘要由CSDN通过智能技术生成

1.背景

        在学习过程中我们使用了shirospring security,两者作为安全框架也是各有千秋,所有今天就来描述一下spring security比起shiro为什么使用的越来越多,优势是什么以及认证原理

2.区别和优势

       

  1. 区别

    • Shiro:Apache Shiro 是一个功能强大且易于使用的开源安全框架,提供了身份验证、授权、加密、会话管理等功能。Shiro 的设计理念是简单直观,易于集成到各种应用中,适用于各种规模的项目。
    • Spring Security:Spring Security 是 Spring 生态系统中的安全框架,提供了全面的安全解决方案,包括身份验证、授权、会话管理、攻击防护等功能。Spring Security 的设计是基于 Spring 框架的,与 Spring 框架深度集成,适用于基于 Spring 的项目。
  2. 优势

    • Shiro 优势
      • 简单易用:Shiro 的设计简单直观,易于理解和使用。
      • 灵活性:Shiro 提供了丰富的配置选项和可插拔的组件,可以根据需求定制安全策略。
      • 轻量级:Shiro 的核心库相对较小,不依赖其他框架,适合轻量级项目。
    • Spring Security 优势
      • 深度集成:Spring Security 与 Spring 框架深度集成,可以方便地与 Spring 其他模块结合使用。
      • 社区支持:Spring Security 是 Spring 生态系统中的官方安全框架,得到了广泛的社区支持和持续的更新维护。
      • 多样性:Spring Security 提供了丰富的安全功能和扩展点,适用于各种复杂的安全需求。

3.应用场景

  1. 项目类型

    • Shiro:适用于各种规模的项目,特别适合中小型项目或独立的安全认证控制需求。
    • Spring Security:适用于基于 Spring 框架的项目,特别适合需要与 Spring 框架深度集成的大型企业级项目。
  2. 技术栈

    • Shiro:独立于任何框架,可以与各种 Java 技术栈集成,灵活性较高。
    • Spring Security:与 Spring 框架深度集成,提供了与 Spring 其他模块的无缝整合,适合已经使用 Spring 的项目。
  3. 功能需求

    • Shiro:提供了简单直观的身份验证、授权、加密、会话管理等功能,适用于简单的安全控制需求。
    • Spring Security:提供了全面的安全解决方案,包括身份验证、授权、会话管理、攻击防护等功能,适用于复杂的安全控制需求。

4.认证流程

        1.简介

        1.SpringSecurity的本质就是一个过滤器链,内部包含了提供各种功能的过滤器,所有的认证流程都是通过过滤器来完成的,下面就是以下就是具体的认证信息

  1. 用户提交认证请求:用户在应用程序的登录页面输入用户名和密码,提交认证请求。

  2. AuthenticationFilter 进行认证:Spring Security 中的 AuthenticationFilter 拦截认证请求,根据配置的认证方式进行认证处理。

  3. AuthenticationManager 进行身份验证:AuthenticationFilter 将认证信息传递给 AuthenticationManager,AuthenticationManager 负责实际的身份验证过程。

  4. ProviderManager 委托给 AuthenticationProvider:AuthenticationManager 通常会委托给 ProviderManager,ProviderManager 包含多个 AuthenticationProvider,每个 Provider 负责不同类型的认证。

  5. AuthenticationProvider 进行具体认证:AuthenticationProvider 根据配置的认证方式(如用户名密码认证、LDAP 认证等)对用户进行身份验证,验证成功则返回一个经过身份验证的 Authentication 对象。

  6. 认证成功处理:如果认证成功,AuthenticationManager 将认证成功的 Authentication 对象返回给 AuthenticationFilter,AuthenticationFilter 会根据配置的成功处理器(如登录成功跳转页面)进行后续处理。

  7. 认证失败处理:如果认证失败,AuthenticationProvider 会抛出相应的异常,AuthenticationManager 会将异常传递给 AuthenticationFilter,AuthenticationFilter 会根据配置的失败处理器(如登录失败提示)进行后续处理。

  8. 生成认证凭证:认证成功后,Spring Security 会生成一个包含用户信息和权限信息的认证凭证(Authentication)对象,并将其存储在 SecurityContextHolder 中,供后续的权限控制和访问控制使用。

        2.认证流程中的核心类

    Authentication接口: 它的实现类,表示当前访问系统的用户,封装了用户相关信息
    AuthenticationManager接口:定义了认证Authentication的方法
    UserDetailsService接口:加载用户特定数据的核心接口。里面定义了一个根据用户名查询用户信息的方法
    UserDetails接口:提供核心用户信息。通过UserDetailsService根据用户名获取处理的用户信息要封装成UserDetails对象返回。然后将这些信息封装到Authentication对象中
    UsernamePasswordAuthenticationFilter实现类:实现了我们最常用的基于用户名和密码的认证逻辑,封装Authentication对象

        3.认证全过程

        1.通过浏览器提交用户名密码

        我们一开始会给我一个默认的登录页面,通过提交 http://localhost:8080/login,在输入默认的用户名称和密码进入

        2.通过提交信息后默认的登录是用UsernamepasswordAuthencitionFilter过滤器去拦截

3.调用AuthenticationManager的authenticate方法进行认证

因为AuthenticationManager中管理了一群Provider,所以调用的就是那一群Provider的authenticate方法进行认证

4.调用DaoAuthenticationProvider的authenticate方法进行认证

5.获得DaoAuthenticationProvider的UserDetailService对象,再调用此对象的loadUserByUsername方法查询用户信息

  • 22
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Security 是一个功能强大的身份验证和访问控制框架,而 JWT(JSON Web Token)是一种用于跨域身份验证的开放标准。使用 Spring Security 和 JWT 实现单点登录可以提供安全的身份验证和无状态的会话管理。 下面是实现单点登录的基本原理: 1. 用户登录:用户通过提供用户名和密码进行认证,并且成功通过验证。 2. 生成 JWT:一旦用户通过认证,服务器会生成一个 JWT,并将其作为响应的一部分返回给客户端。 3. JWT 存储:客户端收到 JWT 后,需要将其存储在本地,通常是在客户端的本地存储或者浏览器的 Cookie 中。 4. 请求时携带 JWT:每次客户端进行请求时,需要将 JWT 添加到请求的头部(通常是 Authorization 头部),以便服务器能够验证用户的身份。 5. 验证 JWT:服务器在接收到请求时,会从请求头部中提取 JWT,并进行验证。验证包括验证令牌的签名、过期时间等信息,以确保令牌的合法性。 6. 访问控制:一旦 JWT 验证成功,服务器将允许用户访问受保护的资源。 7. 单点登录:如果用户需要访问其他受保护的服务,客户端会将 JWT 携带到这些服务的请求中。服务端会对 JWT 进行验证,如果验证通过,则用户无需再次登录,即可访问其他服务。 总结起来,使用 Spring Security 和 JWT 实现单点登录的过程是:用户登录成功后,生成 JWT,并将其存储在客户端。客户端在每次请求时携带 JWT,并通过服务器的验证,以实现身份验证和访问控制。这种无状态的会话管理方式使得服务端无需存储用户的会话信息,提高了系统的可扩展性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值