Web 应用安全
<debug>
启用Spring Security调试基础设施。这将提供人类可读(多行)调试信息,用于监控进入安全过滤器的请求。其中可能包含敏感信息,例如请求参数或请求头,因此应仅在开发环境中使用。
<http>
如果在应用中使用 <http> 元素,系统将创建一个名为 "springSecurityFilterChain" 的 FilterChainProxy bean,并使用该元素内的配置在 FilterChainProxy 内部构建过滤器链。从 Spring Security 3.1 开始,可通过额外的 http 元素添加更多过滤器链(具体设置方式参见 web.xml 映射配置说明[1])。某些核心过滤器始终存在于过滤器链中,而其他过滤器则会根据当前属性和子元素动态添加到过滤器栈中。标准过滤器的位置是固定的(详见命名空间介绍中的过滤器顺序表),这消除了早期版本框架中用户必须显式配置 FilterChainProxy bean 过滤器链时常见的错误来源。当然,若需完全控制配置,您仍可自行配置过滤器链。
所有需要引用AuthenticationManager的过滤器将自动注入由命名空间配置创建的内部实例。
每个 <http> 命名空间块始终会创建一个 SecurityContextPersistenceFilter、一个 ExceptionTranslationFilter 和一个 FilterSecurityInterceptor。这些过滤器是固定的,无法用其他替代品替换。
<http> 属性
<http> 元素上的属性用于控制核心过滤器的某些属性。
-
use-authorization-manager 使用 AuthorizationManager API 替代 SecurityMetadataSource(默认为 true)
-
use-authorization-manager 使用此 AuthorizationManager,而不是从 <intercept-url> 元素派生的管理器
-
access-decision-manager-ref 可选属性,指定应用于 HTTP 请求授权的
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将根据已配置的身份验证机制进行设置。此属性允许通过定义一个自定义的AuthenticationEntryPointbean 来覆盖此行为,该 bean 将启动身份验证过程。 -
jaas-api-provision 如果可用,则通过从
JaasAuthenticationToken获取的Subject来运行请求,这是通过向过滤器栈添加一个JaasApiIntegrationFilterbean 来实现的。默认为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属性。 -
redirect-to-https-request-matcher-ref 对实现
RequestMatcher的 bean 的引用,该 bean 将确定哪些请求必须重定向到 HTTPS。例如,当希望在本地运行 HTTP 而在生产环境中使用请求头运行 HTTPS 时,这很有帮助。 -
request-matcher 定义在
FilterChainProxy和由intercept-url创建的 bean 中使用的RequestMatcher策略,以匹配传入的请求。当前选项是mvc、ant、regex和ciRegex,分别对应 Spring MVC、Ant、正则表达式和不区分大小写的正则表达式。每个 intercept-url 元素都会使用其 pattern、method 和 servlet-path 属性创建一个单独的实例。默认情况下,路径使用PathPatternRequestMatcher进行匹配;但是,正则表达式使用RegexRequestMatcher进行匹配。有关匹配执行方式的更多详细信息,请参阅这些类的 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(),这是通过向过滤器栈添加一个SecurityContextHolderAwareRequestFilterbean 来实现的。默认为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,它将尝试查找其 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 嗅探,使其偏离声明的 content-type。这在下载扩展程序时也适用于 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 应用程序可以利用它来管理 referrer 字段,该字段包含用户上次访问的页面。 -
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 是一种机制,用于传达希望浏览器阻止对给定资源的 no-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 指定是否禁用严格传输安全策略。默认值为 false。
-
include-sub-domains 指定是否包含子域名。默认值为 true。
-
max-age-seconds 指定主机应被视为已知 HSTS 主机的最大时长。默认值为一年。
-
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 指定浏览器是否应仅报告固定验证失败。默认值为 true。
-
report-uri 指定浏览器应报告固定验证失败的 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 标头。
<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 标头,以帮助防范反射型 / 类型 1 跨站脚本 (XSS)攻击。这绝不是针对 XSS 攻击的全面防护!
<xss-protection> 属性
-
xss-protection-disabled 不包含用于反射型 / 类型 1 跨站脚本 (XSS) 保护的响应头。
-
xss-protection-header-value 显式设置反射型 / 类型 1 跨站脚本 (XSS) 响应头的值。可选值为:"0"、"1"、"1; mode=block"。默认为 "0"。
<xss-protection> 的父元素
<content-type-options>
在响应中添加值为 nosniff 的 X-Content-Type-Options 标头。这将为 IE8+ 和 Chrome 扩展禁用 MIME 嗅探。
<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> 的父元素
<anonymous>
向过滤器栈中添加一个 AnonymousAuthenticationFilter 和一个 AnonymousAuthenticationProvider。如果使用 IS_AUTHENTICATED_ANONYMOUSLY 属性,则必须配置此项。
<anonymous> 的父元素
<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 的替代方案,让你完全控制认证失败后的导航流程。其值应为应用上下文中一个
AuthenticationFailureHandlerbean 的名称。 -
authentication-failure-url 映射到
UsernamePasswordAuthenticationFilter的authenticationFailureUrl属性。定义登录失败时浏览器将被重定向到的 URL。默认为/login?error,该 URL 将由自动登录页面生成器自动处理,重新渲染登录页面并显示错误信息。 -
authentication-success-handler-ref 可作为 default-target-url 和 always-use-default-target 的替代方案,让你完全控制成功认证后的导航流程。其值应为应用上下文中一个
AuthenticationSuccessHandlerbean 的名称。默认情况下,会使用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,在最终用户完成身份验证并授权客户端访问后,授权服务器 会将最终用户的用户代理重定向到此 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 令牌和(可选)UserInfo 响应的 JSON Web Signature (JWS) 的加密密钥。
-
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,它将从请求中获取承载令牌。此属性不能与authentication-converter-ref同时使用 -
entry-point-ref 引用一个
AuthenticationEntryPoint,它将处理未经授权的请求 -
authentication-converter-ref 引用一个
AuthenticationConverter,用于将请求转换为认证信息。此属性不能与bearer-token-resolver-ref同时使用
<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上进行客户端身份验证的 Client Id。 -
client-secret 用于在提供的
introspection-uri上进行客户端身份验证的 Client Secret。 -
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> 元素
这是一个顶级元素,可用于向命名空间创建的 FilterChainProxy 中注入自定义的 HttpFirewall 实现。默认实现应适用于大多数应用程序。
<http-firewall> 属性
- ref 定义对实现
HttpFirewall的 Spring bean 的引用。
<intercept-url>
该元素用于定义应用程序感兴趣的URL模式集,并配置应如何处理这些模式。它用于构建FilterSecurityInterceptor所使用的FilterInvocationSecurityMetadataSource。此外,如果某些特定URL需要通过HTTPS访问(例如),它还负责配置ChannelProcessingFilter。当将指定模式与传入请求进行匹配时,匹配按照元素声明的顺序进行。因此,最具体的模式应放在前面,最通用的模式应放在最后。
<intercept-url> 的父元素
<intercept-url> 属性
-
access 列出将存储在
FilterInvocationSecurityMetadataSource中的访问属性,这些属性针对定义的 URL 模式/HTTP 方法组合。这应该是一个以逗号分隔的安全配置属性列表(例如角色名称)。 -
method HTTP 方法,将与模式和 servlet 路径(可选)结合使用以匹配传入的请求。如果省略,则任何方法都将匹配。如果指定了相同模式,一个有方法限制而另一个没有,则具有方法限制的匹配将优先。
-
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 的端口。
此属性对 filter-security-metadata-source 无效
- servlet-path 用于与模式和HTTP方法结合以匹配传入请求的servlet路径。此属性仅在request-matcher为'mvc'时适用。此外,仅在以下两种使用场景中需要设置该值:1)
ServletContext中注册了两个或更多映射以'/'开头且不同的HttpServlet;2) 模式以已注册的HttpServlet路径值开头(不包括默认(根)HttpServlet'/')。
此属性对 filter-security-metadata-source 无效
<jee>
向过滤器链中添加一个J2eePreAuthenticatedProcessingFilter,以提供与容器认证的集成。
<jee> 的父元素
<jee> 属性
-
mappable-roles 传入的 HttpServletRequest 中需要查找的角色列表,以逗号分隔。
-
user-service-ref 对用户服务(或 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)
设置此属性将为
SessionManagementFilter注入一个配置了该属性值的SimpleRedirectInvalidSessionStrategy。当提交了无效的会话 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 断言方可以发送 SAML 2.0 注销请求的 URL。
-
logout-response-url 断言方可以发送 SAML 2.0 注销响应的 URL。
-
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属性。其值应为应用上下文中某个AuthenticationSuccessHandlerbean 的名称。 -
data-source-ref 对
DataSourcebean 的引用。如果设置了此项,将使用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。如果使用了注销过滤器,该 bean 也应实现LogoutHandler接口。 -
token-repository-ref 配置
PersistentTokenBasedRememberMeServices,但允许使用自定义的PersistentTokenRepositorybean。 -
token-validity-seconds 映射到
AbstractRememberMeServices的tokenValiditySeconds属性。指定“记住我”cookie 有效的秒数。默认有效期为 14 天。 -
use-secure-cookie 建议“记住我”cookie 仅通过 HTTPS 提交,因此应标记为 "secure"。默认情况下,如果登录请求的连接是安全的(理应如此),则会使用安全 cookie。如果将此属性设置为
false,则不会使用安全 cookie。将其设置为true将始终在 cookie 上设置安全标志。此属性映射到AbstractRememberMeServices的useSecureCookie属性。 -
user-service-ref “记住我”服务实现需要访问
UserDetailsService,因此必须在应用上下文中定义一个。如果只有一个实例,命名空间配置将自动选择并使用它。如果有多个实例,可以使用此属性显式指定一个 beanid。
<request-cache> 元素
设置 RequestCache 实例,该实例将被 ExceptionTranslationFilter 用于在调用 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 设置此属性将注入
SessionManagementFilter,并配置一个使用该属性值的SimpleRedirectInvalidSessionStrategy。当提交无效的会话 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> 的子元素
<并发控制>
新增对并发会话控制的支持,允许限制用户可拥有的活动会话数量。系统将创建一个 ConcurrentSessionFilter,并在 SessionManagementFilter 中使用 ConcurrentSessionControlAuthenticationStrategy。如果已声明 form-login 元素,该策略对象也将注入到已创建的身份验证过滤器中。系统将创建一个 SessionRegistry 实例(默认为 SessionRegistryImpl 实例,除非用户希望使用自定义 Bean)供策略使用。
<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作为值以支持无限制的会话。 -
max-sessions-ref 允许注入
ConcurrentSessionControlAuthenticationStrategy使用的SessionLimit实例。 -
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的引用。 -
principal-extractor-ref 指向
X509PrincipalExtractor的引用,该提取器将被认证过滤器使用。 -
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>
用于定义特定的URL模式及适用于匹配该模式的URL过滤器列表。当多个filter-chain元素按顺序组装成列表以配置FilterChainProxy时,必须将最具体的模式置于列表顶部,最通用的模式置于底部。
<filter-chain> 的父元素
<filter-chain> 属性
-
filters 一个以逗号分隔的、指向实现了
Filter接口的 Spring Bean 的引用列表。值 "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 的使用,因为其令牌存储在服务器端。