在 Spring Security 框架中,认证(Authentication)和授权(Authorization)是两个核心概念,它们是实现应用安全的基石。虽然这两个术语通常一起使用,但它们描述的是两个不同的安全过程。
认证 (Authentication)
认证是确认某个用户的身份的过程。简而言之,认证过程是用来验证用户是否是他们声称的那个人。在 Web 应用中,认证通常是通过登录过程完成的,用户会提供用户名和密码。如果提供了有效的凭据,系统将会认可用户的身份。
Spring Security 中的认证过程是通过 AuthenticationManager
接口来管理的,该接口只有一个方法:
public interface AuthenticationManager {
Authentication authenticate(Authentication authentication) throws AuthenticationException;
}
当一个 Authentication
请求被发送到 AuthenticationManager
时,它会使用配置好的 AuthenticationProvider
(s) 来验证凭据。如果成功,它将返回一个已填充好的 Authentication
实例,这表示认证过程成功。这个过程可能涉及到与数据库、LDAP、Active Directory、一个 OAuth 提供者进行交互,或是其他自定义来源验证用户身份。
授权 (Authorization)
一旦认证过程成功,下一步是确定用户是否有执行特定操作的权限。授权是指决定一个已验证身份的用户能够访问的应用资源和执行的操作。通常,这些操作是基于用户角色和权限来控制的。
在 Spring Security 中,授权是通过 AccessDecisionManager
和一系列的 AccessDecisionVoter
对象来实现的。在进行授权决策时,会将用户的 Authentication
、请求的 SecureObject
(如 HTTP 请求)、以及相关 ConfigAttribute
(s)(安全配置属性)传递给 AccessDecisionManager
。它会询问各个 AccessDecisionVoter
对象,通过投票方式来决定是否允许访问请求资源。
结合使用
Spring Security 通过许多内建机制来支持认证和授权。这里是一个实现 Spring Security 认证和授权中典型流程的高级概述:
- 用户向应用程序提交带有凭据的登录请求(通常是用户名和密码)。
- Spring Security 的
AuthenticationFilter
捕获这个请求,并将凭据封装进Authentication
对象中。 Authentication
对象被传递给AuthenticationManager
进行处理。AuthenticationManager
使用一个或多个AuthenticationProvider
来验证凭据。- 如果认证成功,用户的身份和相关权限被保存在安全上下文(SecurityContext)中。
- 在用户尝试访问保护的资源时,通过
AccessDecisionManager
来判断是否授权这个访问请求。
总的来说,在 Spring Security 中,认证负责确认用户是谁,而授权负责确定用户能做什么。这两个概念在实际应用中紧密相连,共同提供了一个全面的应用程序安全体系。
标签:Spring,用户,认证,Authentication,授权,Security,SpringSecurity From: https://blog.csdn.net/m0_68948067/article/details/139322815