「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=trueAuthenticationException如果它认为输入代表无效的委托人,则抛出一个。null如果它不能决定返回。
AuthenticationException是运行时异常。它通常由应用程序以通用方式处理,具体取决于应用程序的样式或用途。换句话说,通常不期望用户代码来捕获和处理它。例如,Web UI 可能会呈现一个说明身份验证失败的页面,并且后端 HTTP 服务可能会发送一个 401 响应,WWW-Authenticate根据上下文是否有标头。
最常用的实现AuthenticationManager是ProviderManager,它委托给一个AuthenticationProvider实例链。AnAuthenticationProvider有点像 an