Spring Security总结

Architecture Components

SecurityContextHodler

ThreadLocal相关的安全上下文Holder

SecurityContext

包含 Authtication对象,用于获取当前已认证的用户信息

Authentication

  1. 未认证之前的包含用户提供凭证信息,交给 AuthenticationManager 处理

  2. 认证完成后的包含用户认证信息,通常托管在SecurityContext

GrantedAuthority

在用户认证中授予给用户的权限

AuthenticationManager

定义了SpringSecurity过滤器如何执行身份验证的API

ProviderManager

AuthenticationManager 的一个实现

AuthenticationProvider

ProviderManager用于执行特定类型的身份验证

Request Credentials with AuthenticationEntryPoint

用于从客户端请求凭证(即重定向到登录页面,发送一个WWW-Authenticate响应,等等)

AbstractAuthenticationProcessingFilter

用于身份验证的基本过滤器。这还可以很好地了解身份验证的高级流程以及各个部分如何协同工作。

Authentication Mechanisms

用户身份验证机制

Username and Password

如何通过用户名密码进行认证

OAuth 2.0 Login

使用OpenID Connect和非标准OAuth 2.0登录进行OAuth 2.0登录(如Github等…)

SAML 2.0 Login

Central Authentication Server (CAS)

Remember Me

JAAS Authentication

OpenID

Pre-Authentication Scenarios

X509 Authentication

SecurityContextHolder

SecurityContextHolder

获取token

Authentication-server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
TokenEndpoint 

`/oauth/token`

incoming request
|
SecurityFilterChain
|
AbstractAuthenticationProcessingFilter
|
ClientCredentialsTokenEndpointFilter
|
AuthenticationManager
|
|
ProviderManager
- -
|
AuthenticationProvider
|
AbstractUserDetailsAuthenticationProvider
|
DaoAuthenticationProvider
|
TokenEndpoint
|
authenticate->tokenGrant->return

ClientDetails
-->
AuthorizedGrantTypes
-> password,xxx,xxx,xxx

检查token

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Authentication-server

CheckTokenEndpoint

`/oauth/check_token`

imcomping request
|
OAuth2AuthenticationProcessingFilter
|
OAuth2AuthenticationManager#loadAuthentication
· |
RemoteTokenServices 验证token正确性
|
AccessTokenConverter
|
UserAuthenticationConverter 从map中获取认证信息(principal,authorities)

-> FixedAuthoritiesExtractor 获取权限列表

-> UserDetailsService 获取principal认证信息(可以表示为用户信息)