「Spring」认证安全架构指南

本指南是 Spring Security 的入门指南,提供对框架设计和基本构建块的深入了解。我们仅涵盖应用程序安全的基础知识。但是,这样做,我们可以清除使用 Spring Security 的开发人员遇到的一些困惑。为此,我们通过使用过滤器,更一般地,通过使用方法注解,来看看在 Web 应用程序中应用安全性的方式。当您需要深入了解安全应用程序的工作原理、如何对其进行自定义或需要学习如何考虑应用程序安全性时,请使用本指南。

本指南并非旨在作为解决最基本问题的手册或秘诀(这些问题还有其他来源),但它对初学者和专家都可能有用。Spring Boot 也经常被引用,因为它为安全应用程序提供了一些默认行为,并且了解它如何与整体架构相适应会很有用。

所有原则同样适用于不使用 Spring Boot 的应用程序。

身份验证和访问控制

应用程序安全性归结为两个或多或少独立的问题:身份验证(你是谁?)和授权(你可以做什么?)。有时人们会说“访问控制”而不是“授权”,这可能会让人感到困惑,但这样想可能会有所帮助,因为“授权”在其他地方被重载了。Spring Security 的架构旨在将身份验证与授权分开,并为两者提供策略和扩展点。

验证

认证的主要策略接口是AuthenticationManager,它只有一个方法:

public interface AuthenticationManager {

  Authentication authenticate(Authentication authentication)
    throws AuthenticationException;
}

An可以在其方法AuthenticationManager中做三件事之一:authenticate()

  • 如果它可以验证输入代表一个有效的主体,则返回一个Authentication(通常带有)。authenticated=true
  • AuthenticationException如果它认为输入代表无效的委托人,则抛出一个。
  • null如果它不能决定返回。

AuthenticationException是运行时异常。它通常由应用程序以通用方式处理,具体取决于应用程序的样式或用途。换句话说,通常不期望用户代码来捕获和处理它。例如,Web UI 可能会呈现一个说明身份验证失败的页面,并且后端 HTTP 服务可能会发送一个 401 响应,WWW-Authenticate根据上下文是否有标头。

最常用的实现AuthenticationManager是ProviderManager,它委托给一个AuthenticationProvider实例链。AnAuthenticationProvider有点像 an AuthenticationManager,但它有一个额外的方法允许调用者查询它是否支持给定的Authentication类型:

public interface AuthenticationProvider {

  Authentication authenticate(Authentication authentication)
      throws AuthenticationException;

  boolean supports(Class<?> authentication);
}

方法中的Class<?>参数supports()是真的Class<? extends Authentication>(只询问它是否支持传递给authenticate()方法的东西)。AProviderManager可以通过委托给AuthenticationProviders. 如果 aProviderManager不能识别特定的Authentication实例类型,则会跳过它。

AProviderManager有一个可选的父级,如果所有提供者都返回,它可以咨询它null。如果父级不可用,则null Authentication结果为AuthenticationException.

有时,应用程序具有受保护资源的逻辑组(例如,与路径模式匹配的所有 Web 资源,例如/api/**),并且每个组都可以有自己的专用AuthenticationManager. 通常,它们中的每一个都是一个ProviderManager,并且它们共享一个父级。然后,父级是一种“全局”资源,充当所有提供者的后备。

图 1. 使用的AuthenticationManager层次结构ProviderManager

自定义身份验证管理器

Spring Security 提供了一些配置助手来快速获取应用程序中设置的常见身份验证管理器功能。最常用的帮助程序是AuthenticationManagerBuilder,它非常适合设置内存、JDBC 或 LDAP 用户详细信息或添加自定义UserDetailsService. 以下示例显示了一个配置全局(父)的应用程序AuthenticationManager:

@Configuration
public class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值