Web 应用安全
<debug>
启用 Spring Security 调试基础架构。这将提供人类可读的(多行)调试信息,以监控进入安全过滤器的请求。这可能包括敏感信息,例如请求参数或头部,并且仅应在开发环境中使用。
<http>
如果你在应用程序中使用了 <http>
元素,将会创建一个名为 "springSecurityFilterChain" 的 FilterChainProxy
bean,并且该元素内的配置将用于在 FilterChainProxy
中构建过滤器链。从 Spring Security 3.1 开始,可以使用额外的 http
元素来添加额外的过滤器链 [1] 有关如何从 web.xml
设置映射的信息]。某些核心过滤器总是会在过滤器链中创建,而其他过滤器则会根据存在的属性和子元素被添加到堆栈中。标准过滤器的位置是固定的(请参阅 过滤器顺序表 在命名空间介绍中),消除了用户必须在 FilterChainProxy
bean 中显式配置过滤器链时常见的错误源。当然,如果你需要完全控制配置,仍然可以这样做。
所有需要引用 AuthenticationManager 的过滤器都将被自动注入由命名空间配置创建的内部实例。
每个 <http>
命名空间块总是创建一个 SecurityContextPersistenceFilter
、一个 ExceptionTranslationFilter
和一个 FilterSecurityInterceptor
。这些都是固定的,不能用其他替代品替换。
<http> 属性
<http>
元素上的属性控制核心过滤器的一些属性。
-
use-authorization-manager 使用 AuthorizationManager API 而不是 SecurityMetadataSource(默认为 true)
-
access-decision-manager-ref 使用此 AuthorizationManager 而不是从 <intercept-url> 元素派生一个
-
access-decision-manager-ref 可选属性,指定应使用的
AccessDecisionManager
实现的 ID。默认情况下,使用带有RoleVoter
和AuthenticatedVoter
的AffirmativeBased
实现。 -
authentication-manager-ref 对此 http 元素创建的
FilterChain
使用的AuthenticationManager
的引用。 -
observation-registry-ref 用于
FilterChain
及相关组件的ObservationRegistry
的引用 -
auto-config 自动注册登录表单、BASIC 认证、注销服务。如果设置为 "true",则会添加所有这些功能(尽管您仍然可以通过提供相应的元素来自定义每个功能的配置)。如果未指定,默认为 "false"。不建议使用此属性。请改用显式配置元素以避免混淆。
-
create-session 控制 Spring Security 类创建 HTTP 会话的积极性。选项包括:
-
always
- 如果不存在会话,Spring Security 将主动创建一个会话。 -
ifRequired
- 仅当需要时,Spring Security 才会创建会话(默认值)。 -
never
- Spring Security 不会创建会话,但如果应用程序创建了会话,则会使用它。 -
stateless
- Spring Security 不会创建会话,并且在获取 SpringAuthentication
时忽略会话。
-
-
disable-url-rewriting 防止会话 ID 被附加到应用程序中的 URL。如果此属性设置为
true
,客户端必须使用 cookie。默认值为true
。 -
entry-point-ref 通常使用的
AuthenticationEntryPoint
将根据已配置的身份验证机制来设置。此属性允许通过定义自定义的AuthenticationEntryPoint
bean 来覆盖此行为,该 bean 将启动身份验证过程。 -
jaas-api-provision 如果可用,将以从
JaasAuthenticationToken
获取的Subject
运行请求,这是通过向堆栈中添加JaasApiIntegrationFilter
bean 来实现的。默认为false
。 -
name 一个 bean 标识符,用于在上下文中的其他地方引用该 bean。
-
once-per-request 对应于
FilterSecurityInterceptor
的observeOncePerRequest
属性。默认为false
。 -
filter-all-dispatcher-types 对应于
AuthorizationFilter
的shouldFilterAllDispatcherTypes
属性。当use-authorization-manager=false
时不工作。默认为true
。 -
pattern 为 http 元素定义模式,控制将通过其定义的过滤器列表进行过滤的请求。解释取决于配置的 request-matcher。如果没有定义模式,则所有请求都将匹配,因此应首先声明最具体的模式。
-
realm 设置用于基本认证(如果启用)的领域名称。对应于
BasicAuthenticationEntryPoint
的realmName
属性。 -
request-matcher 定义
FilterChainProxy
和由intercept-url
创建的 bean 用来匹配传入请求的RequestMatcher
策略。当前选项有mvc
、ant
、regex
和ciRegex
,分别对应于 Spring MVC、ant、正则表达式和不区分大小写的正则表达式。对于每个 intercept-url 元素,都会根据其 pattern、method 和 servlet-path 属性创建一个单独的实例。ant 路径使用AntPathRequestMatcher
匹配,正则表达式使用RegexRequestMatcher
匹配,对于 Spring MVC 路径匹配则使用MvcRequestMatcher
。有关匹配如何执行的更多详细信息,请参阅这些类的 Javadoc。如果类路径中存在 Spring MVC,则默认策略是 MVC,否则使用 ant 路径。 -
request-matcher-ref 引用一个实现
RequestMatcher
的 bean,该 bean 将确定是否应使用此FilterChain
。这是比 pattern 更强大的替代方案。 -
security 通过将此属性设置为
none
,可以将请求模式映射到空的过滤器链。不会应用任何安全性,Spring Security 的任何功能都将不可用。 -
security-context-repository-ref 允许将自定义的
SecurityContextHolderStrategy
注入到SecurityContextPersistenceFilter
、SecurityContextHolderFilter
、BasicAuthenticationFilter
、UsernamePasswordAuthenticationFilter
、ExceptionTranslationFilter
、LogoutFilter
等中。 -
security-context-explicit-save 如果为 true,则使用
SecurityContextHolderFilter
而不是SecurityContextPersistenceFilter
。需要显式保存 -
security-context-repository-ref 允许将自定义的
SecurityContextRepository
注入到SecurityContextPersistenceFilter
中。 -
servlet-api-provision 提供
HttpServletRequest
安全方法的版本,例如isUserInRole()
和getPrincipal()
,这是通过向堆栈中添加SecurityContextHolderAwareRequestFilter
bean 来实现的。默认为true
。 -
use-expressions 在
access
属性中启用 EL 表达式,如 基于表达式的访问控制 章节所述。默认值为 true。
<http> 的子元素
<access-denied-handler>
此元素允许你使用 error-page 属性为 ExceptionTranslationFilter
使用的默认 AccessDeniedHandler
设置 errorPage
属性,或者使用 ref 属性提供你自己的实现。这在 ExceptionTranslationFilter 部分有更详细的讨论。
<access-denied-handler> 的父元素
<access-denied-handler> 属性
-
error-page 经过身份验证的用户如果请求了他们无权访问的页面,将会被重定向到该访问拒绝页面。
-
ref 定义对类型为
AccessDeniedHandler
的 Spring bean 的引用。
<cors>
此元素允许配置一个 CorsFilter
。如果没有指定 CorsFilter
或 CorsConfigurationSource
,并且 Spring MVC 在类路径中,则使用 HandlerMappingIntrospector
作为 CorsConfigurationSource
。
<cors> 属性
<cors>
元素上的属性控制 headers 元素。
-
ref 可选属性,指定
CorsFilter
的 bean 名称。 -
cors-configuration-source-ref 可选属性,指定要注入到由 XML 命名空间创建的
CorsFilter
中的CorsConfigurationSource
的 bean 名称。
<cors> 的父元素
<headers>
-
Cache-Control
、Pragma
和Expires
- 可以使用 cache-control 元素设置。这确保了浏览器不会缓存您的安全页面。 -
Strict-Transport-Security
- 可以使用 hsts 元素设置。这确保了浏览器在未来请求时自动请求 HTTPS。 -
X-Frame-Options
- 可以使用 frame-options 元素设置。X-Frame-Options 头可以用于防止点击劫持攻击。 -
X-XSS-Protection
- 可以使用 xss-protection 元素设置。X-XSS-Protection 头可以被浏览器用来进行基本控制。 -
X-Content-Type-Options
- 可以使用 content-type-options 元素设置。X-Content-Type-Options 头防止 Internet Explorer 从声明的内容类型中 MIME 侦测响应。这也适用于下载扩展程序时的 Google Chrome。 -
Public-Key-Pinning
或Public-Key-Pinning-Report-Only
- 可以使用 hpkp 元素设置。这允许 HTTPS 网站抵御攻击者使用错误颁发或欺诈性证书进行的冒充。 -
Content-Security-Policy
或Content-Security-Policy-Report-Only
- 可以使用 content-security-policy 元素设置。内容安全策略 (CSP) 是一种机制,Web 应用程序可以利用它来缓解内容注入漏洞,如跨站脚本 (XSS)。 -
Referrer-Policy
- 可以使用 referrer-policy 元素设置,Referrer-Policy 是一种机制,Web 应用程序可以利用它来管理引用字段,该字段包含用户上次访问的页面。 -
Feature-Policy
- 可以使用 feature-policy 元素设置,Feature-Policy 是一种机制,允许 Web 开发者有选择地启用、禁用和修改某些 API 和 Web 功能在浏览器中的行为。 -
Cross-Origin-Opener-Policy
- 可以使用 cross-origin-opener-policy 元素设置,Cross-Origin-Opener-Policy 是一种机制,允许您确保顶级文档不与跨源文档共享浏览上下文组。 -
Cross-Origin-Embedder-Policy
- 可以使用 cross-origin-embedder-policy 元素设置,Cross-Origin-Embedder-Policy 是一种机制,防止文档加载任何未明确授予文档权限的跨源资源。 -
Cross-Origin-Resource-Policy
- 可以使用 cross-origin-resource-policy 元素设置,Cross-Origin-Resource-Policy 是一种机制,传达了一种希望,即浏览器阻止对给定资源的无 CORS 跨源/跨站点请求。
<headers> 属性
<headers>
元素上的属性控制 headers 元素。
-
defaults-disabled 可选属性,指定禁用默认的 Spring Security 的 HTTP 响应头。默认值为 false(包含默认的响应头)。
-
disabled 可选属性,指定禁用 Spring Security 的 HTTP 响应头。默认值为 false(启用响应头)。
<headers> 的父元素
<headers> 的子元素
<cache-control>
添加 Cache-Control
、Pragma
和 Expires
头以确保浏览器不会缓存您的安全页面。
<cache-control> 属性
- disabled 指定是否应禁用缓存控制。默认值为 false。
<cache-control> 的父元素
<hsts>
启用后,会为任何安全请求的响应添加 Strict-Transport-Security 头。这允许服务器指示浏览器在未来请求中自动使用 HTTPS。
<hsts> 属性
-
disabled 指定是否应禁用 Strict-Transport-Security。默认值为 false。
-
include-sub-domains 指定是否应包含子域。默认值为 true。
-
max-age-seconds 指定主机应被视为 Known HSTS Host 的最长时间。默认值为一年。
-
request-matcher-ref 用于确定是否应设置该头部的 RequestMatcher 实例。默认值是如果
HttpServletRequest.isSecure()
为 true。 -
preload 指定是否应包含预加载。默认值为 false。
<hsts> 的父元素
<hpkp>
启用后,会为任何安全请求的响应添加HTTP的公钥绑定扩展头。这允许HTTPS网站抵御使用错误签发或其它欺诈性证书的攻击者进行的冒充。
<hpkp> 属性
-
disabled 指定是否应禁用 HTTP 公钥锁定 (HPKP)。默认值为
true
。 -
include-sub-domains 指定是否应包括子域名。默认值为
false
。 -
max-age-seconds 设置 Public-Key-Pins 头的 max-age 指令的值。默认为 60 天。
-
report-only 指定浏览器是否仅报告 pin 验证失败。默认值为
true
。 -
report-uri 指定浏览器报告 pin 验证失败的 URI。
<hpkp> 的父元素
<pins>
引脚列表
<pins> 的子元素
<pin>
引脚使用base64编码的SPKI指纹作为值,并使用加密哈希算法作为属性来指定。
<pin> 属性
- algorithm 加密哈希算法。默认是 SHA256。
<pin> 的父元素
<content-security-policy>
启用后,会在响应中添加 内容安全策略 (CSP) 头。CSP 是一种机制,Web 应用程序可以利用它来缓解内容注入漏洞,例如跨站脚本 (XSS)。
<content-security-policy> 属性
-
policy-directives 用于
Content-Security-Policy
头的安全策略指令,如果report-only
设置为 true,则使用Content-Security-Policy-Report-Only
头。 -
report-only 设置为 true 时,仅启用
Content-Security-Policy-Report-Only
头来报告策略违规。默认值为 false。
<content-security-policy> 的父元素
<referrer-policy>
启用后,会在响应中添加 Referrer Policy 标头。
<referrer-policy> 属性
- policy Referrer-Policy 标头的策略。默认为 "no-referrer"。
<referrer-policy> 的父元素
<feature-policy>
启用后,会在响应中添加 功能策略 头。
<feature-policy> 属性
- policy-directives 用于 Feature-Policy 头的安全策略指令。
<feature-policy> 的父元素
<frame-options>
启用后,会在响应中添加 X-Frame-Options 头,这允许较新的浏览器执行一些安全检查并防止 点击劫持 攻击。
<frame-options> 属性
-
disabled 如果禁用,将不会包含 X-Frame-Options 头。默认为 false。
-
policy
-
DENY
页面不能在任何框架中显示,无论尝试这样做的站点是什么。这是当指定了 frame-options-policy 时的默认值。 -
SAMEORIGIN
页面只能在其自身同源的框架中显示
换句话说,如果你指定 DENY,不仅从其他站点加载页面到框架中的尝试会失败,从同一站点加载也是如此。另一方面,如果你指定 SAMEORIGIN,只要包含该框架的站点与提供该页面的站点相同,你仍然可以在框架中使用该页面。
-
<frame-options> 的父元素
<permissions-policy>
在响应中添加 Permissions-Policy 头。
<permissions-policy> 属性
- policy 要为
Permissions-Policy
头编写的策略值
<permissions-policy> 的父元素
<xss-protection>
在响应中添加 X-XSS-Protection 头,以帮助防范 反射型 / Type-1 跨站脚本 (XSS) 攻击。但这绝不是对 XSS 攻击的完全防护!
<xss-protection> 属性
-
xss-protection-disabled 不要包含用于反射型 / Type-1 跨站脚本 (XSS) 保护的头信息。
-
xss-protection-header-value 显式设置反射型 / Type-1 跨站脚本 (XSS) 头信息的值。可选值为:"0", "1", "1; mode=block"。默认值为 "0"。
<xss-protection> 的父元素
<content-type-options>
在响应中添加值为 nosniff
的 X-Content-Type-Options 头。这将禁用 MIME 类型嗅探 适用于 IE8+ 和 Chrome 扩展。
<content-type-options> 属性
- disabled 指定是否应禁用内容类型选项。默认值为
false
。
<content-type-options> 的父元素
<cross-origin-embedder-policy>
启用后,会在响应中添加 Cross-Origin-Embedder-Policy 头。
<cross-origin-embedder-policy> 属性
- policy 用于
Cross-Origin-Embedder-Policy
首部的策略。
<cross-origin-embedder-policy> 的父元素
<cross-origin-opener-policy>
启用后,会在响应中添加 Cross-Origin-Opener-Policy 头。
<cross-origin-opener-policy> 属性
- policy 用于
Cross-Origin-Opener-Policy
头的策略。
<cross-origin-opener-policy> 的父元素
<cross-origin-resource-policy>
启用后,会在响应中添加 Cross-Origin-Resource-Policy 头。
<cross-origin-resource-policy> 属性
- policy 用于
Cross-Origin-Resource-Policy
头的策略。
<cross-origin-resource-policy> 的父元素
<header>
在响应中添加额外的头部,需要同时指定名称和值。
<header-attributes> 属性
-
header-name
name
标头的名称。 -
value 要添加的标头的
value
。 -
ref 引用
HeaderWriter
接口的自定义实现。
<header> 的父元素
匿名
添加一个 AnonymousAuthenticationFilter
到堆栈中,并添加一个 AnonymousAuthenticationProvider
。如果你使用了 IS_AUTHENTICATED_ANONYMOUSLY
属性,则需要这样做。
<anonymous> 的父元素
匿名属性
-
enabled 在默认的命名空间设置下,匿名“认证”功能会自动启用。你可以使用此属性禁用它。
-
granted-authority 应该分配给匿名请求的授权。通常这用于为匿名请求分配特定的角色,这些角色随后可以在授权决策中使用。如果未设置,默认为
ROLE_ANONYMOUS
。 -
key 提供者和过滤器之间共享的密钥。通常不需要设置此值。如果未设置,它将默认为一个安全的随机生成值。这意味着在使用匿名功能时,设置此值可以提高启动时间,因为安全的随机值可能需要一段时间才能生成。
-
username 应该分配给匿名请求的用户名。这允许识别主体,这对于日志记录和审计可能很重要。如果未设置,默认为
anonymousUser
。
<csrf>
此元素将为应用程序添加跨站请求伪造 (CSRF) 保护。它还会更新默认的 RequestCache,以便仅在成功认证后重放 "GET" 请求。更多相关信息可以在参考文档的跨站请求伪造 (CSRF) 部分找到。
<csrf> 的父元素
<csrf> 属性
-
disabled 可选属性,用于指定禁用 Spring Security 的 CSRF 保护。默认值为 false(启用 CSRF 保护)。强烈建议保持启用 CSRF 保护。
-
token-repository-ref 要使用的
CsrfTokenRepository
。默认值为HttpSessionCsrfTokenRepository
。 -
request-handler-ref 要使用的可选
CsrfTokenRequestHandler
。默认值为CsrfTokenRequestAttributeHandler
。 -
request-matcher-ref 用于确定是否应应用 CSRF 的
RequestMatcher
实例。默认值为除 "GET"、"TRACE"、"HEAD"、"OPTIONS" 之外的任何 HTTP 方法。
<custom-filter>
此元素用于向过滤器链中添加一个过滤器。它不会创建任何额外的 bean,而是用于选择在应用程序上下文中已经定义的类型为 jakarta.servlet.Filter
的 bean,并将其添加到 Spring Security 维护的过滤器链中的特定位置。完整详情请参阅 命名空间章节。
<custom-filter> 的父元素
<custom-filter> 属性
-
after 自定义过滤器应放置在链中的紧接在此过滤器之后。此功能仅适用于希望将自定义过滤器混合到安全过滤链中,并且对标准 Spring Security 过滤器有一定了解的高级用户。过滤器名称映射到特定的 Spring Security 实现过滤器。
-
before 自定义过滤器应放置在链中的紧接在此过滤器之前
-
position 自定义过滤器应放置在链中的显式位置。如果您要替换标准过滤器,请使用此属性。
-
ref 定义一个实现
Filter
的 Spring bean 的引用。
<expression-handler>
定义了在启用基于表达式的访问控制时将使用的 SecurityExpressionHandler
实例。如果未提供,则将使用默认实现(不支持 ACL)。
<expression-handler> 的父元素
<expression-handler> 属性
- ref 定义对实现
SecurityExpressionHandler
的 Spring bean 的引用。
<form-login>
用于向过滤器堆栈添加一个 UsernamePasswordAuthenticationFilter
,并向应用程序上下文添加一个 LoginUrlAuthenticationEntryPoint
,以按需提供身份验证。这将始终优先于其他通过命名空间创建的入口点。如果未提供任何属性,则会在 URL "/login" 自动生成登录页面 [2]。可以使用 <form-login> 属性 自定义行为。
<form-login> 的父元素
<form-login> 属性
-
always-use-default-target 如果设置为
true
,用户将始终从 default-target-url 给定的值开始,无论他们是如何到达登录页面的。映射到UsernamePasswordAuthenticationFilter
的alwaysUseDefaultTargetUrl
属性。默认值是false
。 -
authentication-details-source-ref 引用一个
AuthenticationDetailsSource
,该源将被认证过滤器使用 -
authentication-failure-handler-ref 可以作为 authentication-failure-url 的替代选项,使您能够完全控制认证失败后的导航流程。该值应是应用程序上下文中的一个
AuthenticationFailureHandler
bean 的名称。 -
authentication-failure-url 映射到
UsernamePasswordAuthenticationFilter
的authenticationFailureUrl
属性。定义了登录失败时浏览器将被重定向到的 URL。默认值是/login?error
,这将由自动登录页面生成器自动处理,重新渲染带有错误消息的登录页面。 -
authentication-success-handler-ref 这可以作为 default-target-url 和 always-use-default-target 的替代选项,使您能够完全控制成功认证后的导航流程。该值应是应用程序上下文中的一个
AuthenticationSuccessHandler
bean 的名称。默认情况下,使用SavedRequestAwareAuthenticationSuccessHandler
的实现,并注入 default-target-url 。 -
default-target-url 映射到
UsernamePasswordAuthenticationFilter
的defaultTargetUrl
属性。如果未设置,默认值是 "/"(应用程序根目录)。用户在登录后将被带到此 URL,前提是他们在尝试访问受保护资源时没有被要求登录,在这种情况下,他们将被带到最初请求的 URL。 -
login-page 用于渲染登录页面的 URL。映射到
LoginUrlAuthenticationEntryPoint
的loginFormUrl
属性。默认值是 "/login"。 -
login-processing-url 映射到
UsernamePasswordAuthenticationFilter
的filterProcessesUrl
属性。默认值是 "/login"。 -
password-parameter 包含密码的请求参数的名称。默认值是 "password"。
-
username-parameter 包含用户名的请求参数的名称。默认值是 "username"。
-
authentication-success-forward-url 将
ForwardAuthenticationSuccessHandler
映射到UsernamePasswordAuthenticationFilter
的authenticationSuccessHandler
属性。 -
authentication-failure-forward-url 将
ForwardAuthenticationFailureHandler
映射到UsernamePasswordAuthenticationFilter
的authenticationFailureHandler
属性。
<oauth2-login>
OAuth 2.0 登录功能配置使用 OAuth 2.0 和/或 OpenID Connect 1.0 提供程序进行身份验证的支持。
<oauth2-login> 的父元素
<oauth2-login> 属性
-
client-registration-repository-ref 引用
ClientRegistrationRepository
。 -
authorized-client-repository-ref 引用
OAuth2AuthorizedClientRepository
。 -
authorized-client-service-ref 引用
OAuth2AuthorizedClientService
。 -
authorization-request-repository-ref 引用
AuthorizationRequestRepository
。 -
authorization-request-resolver-ref 引用
OAuth2AuthorizationRequestResolver
。 -
authorization-redirect-strategy-ref 引用授权
RedirectStrategy
。 -
access-token-response-client-ref 引用
OAuth2AccessTokenResponseClient
。 -
user-authorities-mapper-ref 引用
GrantedAuthoritiesMapper
。 -
user-service-ref 引用
OAuth2UserService
。 -
oidc-user-service-ref 引用 OpenID Connect
OAuth2UserService
。 -
login-processing-url 过滤器处理身份验证请求的 URI。
-
login-page 发送用户进行登录的 URI。
-
authentication-success-handler-ref 引用
AuthenticationSuccessHandler
。 -
authentication-failure-handler-ref 引用
AuthenticationFailureHandler
。 -
jwt-decoder-factory-ref 引用
OidcAuthorizationCodeAuthenticationProvider
使用的JwtDecoderFactory
。
<oauth2-client>
配置 OAuth 2.0 客户端 支持。
<oauth2-client> 的父元素
<oauth2-client> 属性
-
client-registration-repository-ref 对
ClientRegistrationRepository
的引用。 -
authorized-client-repository-ref 对
OAuth2AuthorizedClientRepository
的引用。 -
authorized-client-service-ref 对
OAuth2AuthorizedClientService
的引用。
<oauth2-client> 的子元素
<authorization-code-grant>
配置 OAuth 2.0 授权码授权。
<authorization-code-grant> 的父元素
<authorization-code-grant> 属性
-
authorization-request-repository-ref 对
AuthorizationRequestRepository
的引用。 -
authorization-redirect-strategy-ref 对授权
RedirectStrategy
的引用。 -
authorization-request-resolver-ref 对
OAuth2AuthorizationRequestResolver
的引用。 -
access-token-response-client-ref 对
OAuth2AccessTokenResponseClient
的引用。
<client-registrations>
一个容器元素,用于在 OAuth 2.0 或 OpenID Connect 1.0 提供程序中注册的客户端(ClientRegistration)。
<client-registrations> 的子元素
<client-registration>
表示已在一个 OAuth 2.0 或 OpenID Connect 1.0 提供程序中注册的客户端。
<client-registration> 的父元素
<client-registration> 属性
-
registration-id 唯一标识
ClientRegistration
的 ID。 -
client-id 客户端标识符。
-
client-secret 客户端密钥。
-
client-authentication-method 用于与提供商进行客户端身份验证的方法。支持的值为 client_secret_basic、client_secret_post、private_key_jwt、client_secret_jwt 和 none (公共客户端)。
-
authorization-grant-type OAuth 2.0 授权框架定义了四种 授权许可 类型。支持的值为
authorization_code
、client_credentials
、password
,以及扩展授权类型urn:ietf:params:oauth:grant-type:jwt-bearer
。 -
redirect-uri 授权服务器 在终端用户认证并授权访问客户端后,将终端用户的用户代理重定向到的客户端注册的重定向 URI。
-
scope 客户端在授权请求流程中请求的范围(例如 openid、email 或 profile)。
-
client-name 用于客户端的描述性名称。该名称可能在某些场景下使用,例如在自动生成的登录页面上显示客户端名称时。
-
provider-id 对关联提供者的引用。可以引用一个
<provider>
元素,或者使用常见的提供者(如 google、github、facebook、okta)。
<provider>
OAuth 2.0 或 OpenID Connect 1.0 提供程序的配置信息。
<provider> 的父元素
<provider> 属性
-
provider-id 唯一标识提供者的 ID。
-
authorization-uri 授权服务器的授权端点 URI。
-
token-uri 授权服务器的令牌端点 URI。
-
user-info-uri 用于访问已认证终端用户的声明/属性的 UserInfo 端点 URI。
-
user-info-authentication-method 将访问令牌发送到 UserInfo 端点时使用的身份验证方法。支持的值为 header、form 和 query。
-
user-info-user-name-attribute 在 UserInfo 响应中返回的属性名称,该属性引用终端用户的名称或标识符。
-
jwk-set-uri 用于从授权服务器检索 JSON Web Key (JWK) 集合的 URI,其中包含用于验证 ID 令牌的 JSON Web Signature (JWS) 的加密密钥,以及可选的 UserInfo 响应。
-
issuer-uri 用于通过发现 OpenID Connect 提供者的 配置端点 或授权服务器的 元数据端点 来初始配置
ClientRegistration
的 URI。
<oauth2-resource-server>
添加 BearerTokenAuthenticationFilter
、BearerTokenAuthenticationEntryPoint
和 BearerTokenAccessDeniedHandler
到配置中。此外,必须指定 <jwt>
或 <opaque-token>
。
<oauth2-resource-server> 的父元素
<oauth2-resource-server> 的子元素
<oauth2-resource-server> 属性
-
authentication-manager-resolver-ref 引用一个
AuthenticationManagerResolver
,它将在请求时解析AuthenticationManager
-
bearer-token-resolver-ref 引用一个
BearerTokenResolver
,它将从请求中检索 bearer token -
entry-point-ref 引用一个
AuthenticationEntryPoint
,它将处理未授权的请求
<jwt>
表示一个 OAuth 2.0 资源服务器,它将授权 JWT。
<jwt> 的父元素
<jwt> 属性
-
jwt-authentication-converter-ref 引用
Converter<Jwt, AbstractAuthenticationToken>
-
jwt-decoder-ref 引用
JwtDecoder
。这是一个较大的组件,它会覆盖jwk-set-uri
-
jwk-set-uri 用于从 OAuth 2.0 授权服务器加载签名验证密钥的 JWK 集合 URI
<opaque-token>
表示一个 OAuth 2.0 资源服务器,该服务器将授权不透明令牌
<opaque-token> 的父元素
<opaque-token> 属性
-
introspector-ref 引用
OpaqueTokenIntrospector
。这是一个较大的组件,它会覆盖introspection-uri
、client-id
和client-secret
。 -
introspection-uri 用于检查不透明令牌详细信息的 Introspection Uri。应与
client-id
和client-secret
一起使用。 -
client-id 用于针对提供的
introspection-uri
进行客户端身份验证的客户端 ID。 -
client-secret 用于针对提供的
introspection-uri
进行客户端身份验证的客户端密钥。 -
authentication-converter-ref 引用
OpaqueTokenAuthenticationConverter
。负责将成功的检查结果转换为Authentication
实例。
<relying-party-registrations>
用于在 SAML 2.0 身份提供商上注册(ClientRegistration)的依赖方(们)的容器元素。
<relying-party-registrations> 属性
- id 唯一标识
RelyingPartyRegistrationRepository
的 ID。
<relying-party-registrations> 的子元素
<relying-party-registration>
表示已注册到 SAML 2.0 身份提供者的依赖方
<relying-party-registration> 的父元素
<relying-party-registration> 属性
-
registration-id 唯一标识
RelyingPartyRegistration
的 ID。 -
metadata-location 断言方元数据位置。
-
client-id 依赖方的 EntityID。
-
assertion-consumer-service-location 断言消费者服务位置。等同于依赖方的
<SPSSODescriptor>
中<AssertionConsumerService Location="…"/>
的值。 -
assertion-consumer-service-binding 断言消费者服务绑定。等同于依赖方的
<SPSSODescriptor>
中<AssertionConsumerService Binding="…"/>
的值。支持的值为 POST 和 REDIRECT。 -
single-logout-service-location 单点登出服务位置。等同于依赖方的
<SPSSODescriptor>
中<SingleLogoutService Location="…"/>
的值。 -
single-logout-service-response-location 单点登出服务响应位置。等同于依赖方的
<SPSSODescriptor>
中<SingleLogoutService ResponseLocation="…"/>
的值。 -
single-logout-service-binding 单点登出服务绑定。等同于依赖方的
<SPSSODescriptor>
中<SingleLogoutService Binding="…"/>
的值。支持的值为 POST 和 REDIRECT。 -
asserting-party-id 关联断言方的引用。必须引用一个
<asserting-party>
元素。
<relying-party-registration> 的子元素
<decryption-credential>
与依赖方关联的解密凭证。
<decryption-credential> 的父元素
<decryption-credential> 属性
-
certificate-location 获取证书的位置
-
private-key-location 获取依赖方私钥的位置
<signing-credential>
与依赖方关联的签名凭据。
<verification-credential> 的父元素
<verification-credential> 属性
-
certificate-location 获取此证书的位置
-
private-key-location 获取依赖方的私钥的位置
<asserting-party>
SAML 2.0 断言方的配置信息。
<asserting-party> 的父元素
<asserting-party> 属性
-
asserting-party-id 唯一标识断言方的 ID。
-
entity-id 断言方的 EntityID
-
want-authn-requests-signed
WantAuthnRequestsSigned
设置,表示断言方希望依赖方在发送之前对AuthnRequest
进行签名。 -
single-sign-on-service-location SingleSignOnService 位置。
-
single-sign-on-service-binding SingleSignOnService 绑定。支持的值为 POST 和 REDIRECT。
-
signing-algorithms 此断言方的
org.opensaml.saml.ext.saml2alg.SigningMethod
算法列表,按优先级顺序排列。 -
single-logout-service-location SingleLogoutService 位置。等同于断言方的
<IDPSSODescriptor>
中<SingleLogoutService Location="…"/>
的值。 -
single-logout-service-response-location SingleLogoutService ResponseLocation。等同于断言方的
<IDPSSODescriptor>
中<SingleLogoutService ResponseLocation="…"/>
的值。 -
single-logout-service-binding SingleLogoutService 绑定。等同于断言方的
<IDPSSODescriptor>
中<SingleLogoutService Binding="…"/>
的值。支持的值为 POST 和 REDIRECT。
<asserting-party> 的子元素
<encryption-credential>
与声明方关联的加密凭据。
<encryption-credential> 的父元素
<encryption-credential> 属性
-
certificate-location 获取证书的位置
-
private-key-location 获取依赖方私钥的位置
<verification-credential>
与声明方关联的验证凭证。
<verification-credential> 的父元素
<verification-credential> 属性
-
certificate-location 获取此证书的位置
-
private-key-location 获取依赖方私钥的位置
<http-basic>
添加一个 BasicAuthenticationFilter
和 BasicAuthenticationEntryPoint
到配置中。后者仅在未启用基于表单的登录时作为配置入口点使用。
<http-basic> 的父元素
<http-basic> 属性
-
authentication-details-source-ref 引用将由认证过滤器使用的
AuthenticationDetailsSource
-
entry-point-ref 设置
BasicAuthenticationFilter
使用的AuthenticationEntryPoint
。
<http-firewall> 元素
这是一个顶级元素,可用于将自定义的 HttpFirewall
实现注入到命名空间创建的 FilterChainProxy
中。默认实现应该适用于大多数应用程序。
<http-firewall> 属性
- ref 定义对实现
HttpFirewall
的 Spring bean 的引用。
<intercept-url>
此元素用于定义应用程序感兴趣的一组URL模式,并配置如何处理这些模式。它用于构建FilterSecurityInterceptor
所使用的FilterInvocationSecurityMetadataSource
。如果特定的URL需要通过HTTPS访问,它还负责配置ChannelProcessingFilter
。在将指定的模式与传入的请求进行匹配时,匹配顺序是按照元素声明的顺序进行的。因此,最具体的模式应该放在前面,而最通用的模式应该放在后面。
<intercept-url> 的父元素
<intercept-url> 属性
-
access 列出了将存储在
FilterInvocationSecurityMetadataSource
中的访问属性,用于定义的 URL 模式/方法组合。这应该是一个以逗号分隔的安全配置属性列表(例如角色名称)。 -
method 与模式和 Servlet 路径(可选)结合使用的 HTTP 方法,以匹配传入的请求。如果省略,则任何方法都将匹配。如果指定了相同模式且有无方法的情况,具有特定方法的匹配将优先。
-
pattern 定义 URL 路径的模式。内容将取决于包含 http 元素的
request-matcher
属性,因此如果 Spring MVC 在类路径中,默认为 MVC 匹配器。 -
request-matcher-ref 对
RequestMatcher
的引用,将用于确定是否使用此<intercept-url>
。 -
requires-channel 可以是 "http" 或 "https",具体取决于特定 URL 模式应通过 HTTP 还是 HTTPS 访问。或者,当没有偏好时,可以使用值 "any"。如果任何
<intercept-url>
元素上存在此属性,则会在过滤器堆栈中添加一个ChannelProcessingFilter
,并将其附加依赖项添加到应用程序上下文中。
如果添加了 <port-mappings>
配置,这将被 SecureChannelProcessor
和 InsecureChannelProcessor
bean 用来确定用于重定向到 HTTP/HTTPS 的端口。
- servlet-path 与模式和 HTTP 方法结合使用的 servlet 路径,用于匹配传入的请求。此属性仅在 request-matcher 为 'mvc' 时适用。此外,该值仅在以下 2 种用例中需要:1)
ServletContext
中注册了 2 个或更多HttpServlet
,它们的映射以'/'
开头且不同;2) 模式以已注册的HttpServlet
路径的相同值开头,不包括默认(根)HttpServlet
'/'
。
<jee>
在过滤器链中添加一个 J2eePreAuthenticatedProcessingFilter
,以提供与容器认证的集成。
<jee> 的父元素
<jee> 属性
-
mappable-roles 一个用逗号分隔的角色列表,用于在传入的
HttpServletRequest
中查找。 -
user-service-ref 对
user-service
(或UserDetailsService
bean)Id 的引用
<logout>
在过滤器堆栈中添加一个 LogoutFilter
。这通过 SecurityContextLogoutHandler
进行配置。
<logout> 的父元素
<logout> 属性
-
delete-cookies 一个以逗号分隔的 cookie 名称列表,这些 cookie 应在用户注销时被删除。
-
invalidate-session 对应于
SecurityContextLogoutHandler
的invalidateHttpSession
。默认值为 "true",因此在注销时会失效会话。 -
logout-success-url 用户注销后将被重定向到的目标 URL。默认值为 <form-login-login-page>/?logout(即 /login?logout)
设置此属性将注入一个配置了该属性值的
SimpleRedirectInvalidSessionStrategy
的SessionManagementFilter
。当提交无效的会话 ID 时,策略将被调用,并重定向到配置的 URL。 -
logout-url 导致注销的 URL(即由过滤器处理的 URL)。默认值为 "/logout"。
-
success-handler-ref 可用于提供一个
LogoutSuccessHandler
实例,该实例将在注销后被调用来控制导航。
<saml2-login>
SAML 2.0 登录 功能配置了使用 SAML 2.0 服务提供者的身份验证支持。
<saml2-login> 的父元素
<saml2-login> 属性
-
relying-party-registration-repository-ref 引用
RelyingPartyRegistrationRepository
。 -
authentication-request-repository-ref 引用
Saml2AuthenticationRequestRepository
。 -
authentication-request-context-resolver-ref 引用
Saml2AuthenticationRequestResolver
。 -
authentication-converter-ref 引用
AuthenticationConverter
。 -
login-processing-url 过滤器处理身份验证请求的 URI。
-
login-page 用于用户登录的 URI。
-
authentication-success-handler-ref 引用
AuthenticationSuccessHandler
。 -
authentication-failure-handler-ref 引用
AuthenticationFailureHandler
。 -
authentication-manager-ref 引用
AuthenticationManager
。
<saml2-logout>
SAML 2.0 单点注销 功能配置了对 RP 和 AP 发起的 SAML 2.0 单点注销的支持。
<saml2-logout> 的父元素
<saml2-logout> 属性
-
logout-url 依赖方或断言方可以通过该 URL 触发注销。
-
logout-request-url 断言方可以通过该 URL 发送 SAML 2.0 注销请求。
-
logout-response-url 断言方可以通过该 URL 发送 SAML 2.0 注销响应。
-
relying-party-registration-repository-ref 对
RelyingPartyRegistrationRepository
的引用。 -
logout-request-validator-ref 对
Saml2LogoutRequestValidator
的引用。 -
logout-request-resolver-ref 对
Saml2LogoutRequestResolver
的引用。 -
logout-request-repository-ref 对
Saml2LogoutRequestRepository
的引用。 -
logout-response-validator-ref 对
Saml2LogoutResponseValidator
的引用。 -
logout-response-resolver-ref 对
Saml2LogoutResponseResolver
的引用。
<password-management>
此元素配置密码管理。
<password-management> 的父元素
<password-management> 属性
- change-password-page 修改密码页面。默认为 "/change-password"。
<port-mappings>
默认情况下,配置中会添加一个 PortMapperImpl
的实例,用于重定向到安全和不安全的 URL。可以使用此元素选择性地覆盖该类定义的默认映射。每个子 <port-mapping>
元素定义一对 HTTP:HTTPS 端口。默认映射是 80:443 和 8080:8443。有关覆盖这些映射的示例,请参阅 重定向到 HTTPS。
<port-mappings> 的父元素
<port-mappings> 的子元素
<port-mapping>
提供了一种方法,可以在强制重定向时将 http 端口映射到 https 端口。
<port-mapping> 的父元素
<port-mapping> 属性
-
http 要使用的 http 端口。
-
https 要使用的 https 端口。
<remember-me>
将 RememberMeAuthenticationFilter
添加到堆栈中。这将根据属性设置配置为 TokenBasedRememberMeServices
、PersistentTokenBasedRememberMeServices
或用户指定的实现 RememberMeServices
的 bean。
<remember-me> 的父元素
<remember-me> 属性
-
authentication-success-handler-ref 设置
RememberMeAuthenticationFilter
的authenticationSuccessHandler
属性,如果需要自定义导航。该值应为应用程序上下文中的AuthenticationSuccessHandler
bean 的名称。 -
data-source-ref 对
DataSource
bean 的引用。如果设置了此属性,则将使用PersistentTokenBasedRememberMeServices
并配置一个JdbcTokenRepositoryImpl
实例。 -
remember-me-parameter 用于切换记住我认证的请求参数的名称。默认为 "remember-me"。映射到
AbstractRememberMeServices
的 "parameter" 属性。 -
remember-me-cookie 用于存储记住我认证令牌的 cookie 的名称。默认为 "remember-me"。映射到
AbstractRememberMeServices
的 "cookieName" 属性。 -
key 映射到
AbstractRememberMeServices
的 "key" 属性。应设置为唯一值,以确保记住我 cookie 仅在单个应用程序中有效 [3]。如果未设置此属性,则会生成一个安全的随机值。由于生成安全随机值可能需要一段时间,因此显式设置此值可以帮助提高使用记住我功能时的启动时间。 -
services-alias 将内部定义的
RememberMeServices
导出为 bean 别名,允许应用程序上下文中的其他 bean 使用它。 -
services-ref 允许完全控制过滤器将使用的
RememberMeServices
实现。该值应为应用程序上下文中实现此接口的 bean 的id
。如果使用了注销过滤器,还应实现LogoutHandler
。 -
token-repository-ref 配置
PersistentTokenBasedRememberMeServices
,但允许使用自定义的PersistentTokenRepository
bean。 -
token-validity-seconds 映射到
AbstractRememberMeServices
的tokenValiditySeconds
属性。指定记住我 cookie 应有效的秒数。默认情况下,有效期为 14 天。 -
use-secure-cookie 建议记住我 cookie 仅通过 HTTPS 提交,并且应标记为 "安全"。默认情况下,如果登录请求所经过的连接是安全的(应该是这样),则将使用安全 cookie。如果将此属性设置为
false
,则不会使用安全 cookie。将其设置为true
将始终在 cookie 上设置安全标志。此属性映射到AbstractRememberMeServices
的useSecureCookie
属性。 -
user-service-ref 记住我服务实现需要访问
UserDetailsService
,因此必须在应用程序上下文中定义一个。如果只有一个实例,命名空间配置将自动选择并使用它。如果有多个实例,可以使用此属性显式指定一个 beanid
。
<request-cache> 元素
设置将由 ExceptionTranslationFilter
使用的 RequestCache
实例,用于在调用 AuthenticationEntryPoint
之前存储请求信息。
<request-cache> 的父元素
<request-cache> 属性
- ref 定义对作为
RequestCache
的 Spring bean 的引用。
<session-management>
会话管理相关的功能是通过在过滤器堆栈中添加一个 SessionManagementFilter
来实现的。
<session-management> 的父元素
<session-management> 属性
-
authentication-strategy-explicit-invocation 将此属性设置为 true 意味着
SessionManagementFilter
将不会被注入,并且需要显式调用 SessionAuthenticationStrategy。 -
invalid-session-url 设置此属性将注入一个配置了属性值的
SimpleRedirectInvalidSessionStrategy
的SessionManagementFilter
。当提交无效的会话 ID 时,将调用该策略,重定向到配置的 URL。 -
invalid-session-url 允许注入
SessionManagementFilter
使用的 InvalidSessionStrategy 实例。使用此属性或invalid-session-url
属性之一,但不能同时使用两者。 -
session-authentication-error-url 定义当 SessionAuthenticationStrategy 抛出异常时应显示的错误页面的 URL。如果未设置,将向客户端返回未经授权(401)的错误代码。请注意,如果在基于表单的登录过程中发生错误,则此属性不适用,此时认证失败的 URL 将优先。
-
session-authentication-strategy-ref 允许注入
SessionManagementFilter
使用的 SessionAuthenticationStrategy 实例。 -
session-fixation-protection 指示用户认证时如何应用会话固定保护。如果设置为 "none",则不会应用任何保护。"newSession" 将创建一个新的空会话,仅迁移与 Spring Security 相关的属性。"migrateSession" 将创建一个新的会话并将所有会话属性复制到新会话中。在 Servlet 3.1(Java EE 7)及更高版本的容器中,指定 "changeSessionId" 将保留现有会话并使用容器提供的会话固定保护(
HttpServletRequest#changeSessionId()
)。默认情况下,在 Servlet 3.1 及更高版本的容器中为 "changeSessionId",在旧版本的容器中为 "migrateSession"。如果在旧版本的容器中使用 "changeSessionId",将抛出异常。如果启用了会话固定保护,则
SessionManagementFilter
将注入一个适当配置的DefaultSessionAuthenticationStrategy
。有关更多详细信息,请参阅此类的 Javadoc。
<session-management> 的子元素
<concurrency-control>
增加了对并发会话控制的支持,允许限制用户可以拥有的活动会话数量。将创建一个 ConcurrentSessionFilter
,并且将使用 ConcurrentSessionControlAuthenticationStrategy
与 SessionManagementFilter
。如果已声明 form-login
元素,该策略对象也将被注入到创建的认证过滤器中。将创建一个 SessionRegistry
实例(除非用户希望使用自定义 bean,否则将是一个 SessionRegistryImpl
实例)供该策略使用。
<concurrency-control> 的父元素
<concurrency-control> 属性
-
error-if-maximum-exceeded 如果设置为 "true",当用户试图超过允许的最大会话数时,将引发
SessionAuthenticationException
。默认行为是使原始会话过期。 -
expired-url 当用户尝试使用已被并发会话控制器“过期”的会话时(因为该用户已超出允许的会话数,并在其他地方重新登录),用户将被重定向到的 URL。除非设置了
exception-if-maximum-exceeded
,否则应设置此属性。如果没有提供值,则过期消息将直接写回到响应中。 -
expired-url 允许注入由
ConcurrentSessionFilter
使用的ExpiredSessionStrategy
实例 -
max-sessions 对应于
ConcurrentSessionControlAuthenticationStrategy
的maximumSessions
属性。指定-1
作为值以支持无限会话。 -
session-registry-alias 在自己的 bean 或管理界面中使用内部会话注册表的引用也可能很有用。可以使用
session-registry-alias
属性暴露内部 bean,为其指定一个可以在配置的其他地方使用的名称。 -
session-registry-ref 用户可以使用
session-registry-ref
属性提供自己的SessionRegistry
实现。其他并发会话控制 bean 将被连接以使用它。
<x509>
添加对 X.509 身份验证的支持。将在堆栈中添加一个 X509AuthenticationFilter
,并创建一个 Http403ForbiddenEntryPoint
bean。后者仅在没有使用其他身份验证机制时才会被使用(其唯一功能是返回 HTTP 403 错误代码)。还将创建一个 PreAuthenticatedAuthenticationProvider
,它将加载用户权限的任务委托给 UserDetailsService
。
<x509> 的父元素
<x509> 属性
-
authentication-details-source-ref 一个对
AuthenticationDetailsSource
的引用 -
subject-principal-regex 定义一个正则表达式,该表达式将用于从证书中提取用户名(与
UserDetailsService
一起使用)。 -
user-service-ref 允许在配置了多个实例的情况下,使用特定的
UserDetailsService
与 X.509 一起使用。如果未设置,将会尝试自动定位一个合适的实例并使用它。
<filter-chain-map>
用于显式地使用 FilterChainMap 配置一个 FilterChainProxy 实例
<filter-chain-map> 属性
- request-matcher 定义用于匹配传入请求的策略。当前的选项有 'ant'(用于 ant 路径模式)、'regex' 用于正则表达式以及 'ciRegex' 用于不区分大小写的正则表达式。
<filter-chain-map> 的子元素
<filter-chain>
在 <filter-chain>
中用于定义特定的 URL 模式及其适用的过滤器列表。当多个 filter-chain
元素被组合成一个列表以配置 FilterChainProxy
时,最具体的模式必须放在列表的顶部,而最通用的模式则放在底部。
<filter-chain> 的父元素
<filter-chain> 属性
-
filters 一个由逗号分隔的 Spring bean 引用列表,这些 bean 实现了
Filter
。值 "none" 表示此FilterChain
不应使用任何Filter
。 -
pattern 一个模式,与 request-matcher 结合使用以创建
RequestMatcher
。 -
request-matcher-ref 一个对
RequestMatcher
的引用,用于确定是否应调用filters
属性中的任何Filter
。
<filter-security-metadata-source>
用于显式配置 FilterSecurityMetadataSource
bean 以与 FilterSecurityInterceptor
一起使用。通常只有在显式配置 FilterChainProxy
而不是使用 <http> 元素时才需要这样做。使用的 intercept-url 元素应仅包含 pattern、method 和 access 属性。包含任何其他属性将导致配置错误。
<filter-security-metadata-source> 属性
-
id 一个 bean 标识符,用于在上下文的其他地方引用该 bean。
-
request-matcher 定义用于匹配传入请求的策略。目前的选项有 'ant'(用于 ant 路径模式)、'regex' 用于正则表达式和 'ciRegex' 用于不区分大小写的正则表达式。
-
use-expressions 启用在 <intercept-url> 元素的 'access' 属性中使用表达式,而不是传统的配置属性列表。默认值为 'true'。如果启用,每个属性应包含一个布尔表达式。如果表达式评估结果为 'true',则授予访问权限。
<filter-security-metadata-source> 的子元素
1. 请参阅 xref:servlet/configuration/xml-namespace.adoc#ns-web-xml[介绍章节
2. 此功能实际上只是为了方便而提供,并不适用于生产环境(在生产环境中,将选择一种视图技术来渲染自定义登录页面)。类 DefaultLoginPageGeneratingFilter
负责渲染登录页面,并且可以根据需要提供普通表单登录和/或 OIDC 的登录表单。
3. 这不会影响 PersistentTokenBasedRememberMeServices
的使用,在该服务中,令牌存储在服务器端。