網頁應用程式安全性

<debug>

啟用 Spring Security 偵錯基礎架構。這將提供人類可讀的(多行)偵錯資訊,以監控進入安全性過濾器的請求。這可能包含敏感資訊,例如請求參數或標頭,應僅在開發環境中使用。

<http>

如果您在應用程式中使用 <http> 元素,則會建立名為 "springSecurityFilterChain" 的 FilterChainProxy bean,並且元素內的組態設定會用於在 FilterChainProxy 內建置過濾器鏈。從 Spring Security 3.1 開始,可以使用額外的 http 元素來新增額外的過濾器鏈 [1] 關於如何設定從您的 web.xml 的映射 ]。某些核心過濾器始終在過濾器鏈中建立,而其他過濾器將根據存在的屬性和子元素新增到堆疊中。標準過濾器的位置是固定的(請參閱命名空間簡介中的過濾器順序表),消除了框架先前版本中常見的錯誤來源,當時使用者必須在 FilterChainProxy bean 中明確組態設定過濾器鏈。當然,如果您需要完全控制組態設定,仍然可以這樣做。

所有需要參考AuthenticationManager 的過濾器都將自動注入由命名空間組態設定建立的內部實例。

每個 <http> 命名空間區塊始終建立 SecurityContextPersistenceFilterExceptionTranslationFilterFilterSecurityInterceptor。這些是固定的,不能用替代方案替換。

<http> 屬性

<http> 元素上的屬性控制核心過濾器上的某些屬性。

  • use-authorization-manager 使用 AuthorizationManager API 而不是 SecurityMetadataSource(預設為 true)

  • access-decision-manager-ref 使用此 AuthorizationManager 而不是從 <intercept-url> 元素衍生一個

  • access-decision-manager-ref 可選屬性,指定應該用於授權 HTTP 請求的 AccessDecisionManager 實作的 ID。預設情況下,AffirmativeBased 實作與 RoleVoterAuthenticatedVoter 一起使用。

  • authentication-manager-ref 參考用於由此 http 元素建立的 FilterChainAuthenticationManager

  • observation-registry-ref 參考用於 FilterChain 和相關組件的 ObservationRegistry

  • auto-config 自動註冊登入表單、BASIC 身份驗證、登出服務。如果設定為 "true",則會新增所有這些功能(儘管您仍然可以透過提供各自的元素來自訂每個功能的組態設定)。如果未指定,則預設為 "false"。不建議使用此屬性。請改用明確的組態設定元素,以避免混淆。

  • create-session 控制 Spring Security 類別建立 HTTP session 的積極程度。選項包括

    • always - 如果 session 不存在,Spring Security 將主動建立 session。

    • ifRequired - 僅當需要 session 時,Spring Security 才會建立 session(預設值)。

    • never - Spring Security 永遠不會建立 session,但如果應用程式這樣做,將會使用 session。

    • stateless - Spring Security 將不會建立 session,並忽略 session 以取得 Spring Authentication

  • disable-url-rewriting 防止 session 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 對應於 FilterSecurityInterceptorobserveOncePerRequest 屬性。預設值為 false

  • filter-all-dispatcher-types 對應於 AuthorizationFiltershouldFilterAllDispatcherTypes 屬性。當 use-authorization-manager=false 時不起作用。預設值為 true

  • patternhttp 元素定義模式控制將透過其定義的過濾器列表過濾的請求。解釋取決於已組態設定的 request-matcher。如果未定義模式,則將匹配所有請求,因此應首先宣告最特定的模式。

  • realm 設定用於基本身份驗證的 realm 名稱(如果已啟用)。對應於 BasicAuthenticationEntryPoint 上的 realmName 屬性。

  • request-matcher 定義在 FilterChainProxy 和由 intercept-url 建立的 bean 中使用的 RequestMatcher 策略,以匹配傳入的請求。選項目前為 mvcantregexciRegex,分別用於 Spring MVC、ant、正則表達式和不區分大小寫的正則表達式。針對每個 intercept-url 元素,使用其 patternmethodservlet-path 屬性建立單獨的實例。Ant 路徑使用 AntPathRequestMatcher 匹配,正則表達式使用 RegexRequestMatcher 匹配,對於 Spring MVC 路徑匹配,則使用 MvcRequestMatcher。有關確切如何執行匹配的更多詳細資訊,請參閱這些類別的 Javadoc。如果 Spring MVC 存在於類別路徑中,MVC 是預設策略,否則使用 Ant 路徑。

  • request-matcher-ref 參考實作 RequestMatcher 的 bean,它將確定是否應使用此 FilterChain。這是 pattern 的更強大的替代方案。

  • security 透過將此屬性設定為 none,請求模式可以映射到空的過濾器鏈。將不會套用任何安全性,並且 Spring Security 的任何功能都將不可用。

  • security-context-repository-ref 允許將自訂的 SecurityContextHolderStrategy 注入到 SecurityContextPersistenceFilterSecurityContextHolderFilterBasicAuthenticationFilterUsernamePasswordAuthenticationFilterExceptionTranslationFilterLogoutFilter 等。

  • security-context-explicit-save 如果為 true,則使用 SecurityContextHolderFilter 而不是 SecurityContextPersistenceFilter。需要明確儲存

  • security-context-repository-ref 允許將自訂的 SecurityContextRepository 注入到 SecurityContextPersistenceFilter 中。

  • servlet-api-provision 提供 HttpServletRequest 安全性方法的版本,例如 isUserInRole()getPrincipal(),這些方法是透過將 SecurityContextHolderAwareRequestFilter bean 新增到堆疊來實作的。預設值為 true

<access-denied-handler>

此元素允許您使用 error-page 屬性為 ExceptionTranslationFilter 使用的預設 AccessDeniedHandler 設定 errorPage 屬性,或使用 ref 屬性提供您自己的實作。在關於 ExceptionTranslationFilter 的章節中更詳細地討論了這一點。

<access-denied-handler> 的父元素

<access-denied-handler> 屬性

  • error-page 已驗證身份的使用者請求他們沒有權限存取的頁面時,將重新導向到的存取遭拒頁面。

  • ref 定義對 AccessDeniedHandler 類型的 Spring bean 的參考。

<cors>

此元素允許組態設定 CorsFilter。如果未指定 CorsFilterCorsConfigurationSource 並且 Spring MVC 在類別路徑上,則使用 HandlerMappingIntrospector 作為 CorsConfigurationSource

<cors> 屬性

<cors> 元素上的屬性控制 headers 元素。

  • ref 可選屬性,指定 CorsFilter 的 bean 名稱。

  • cors-configuration-source-ref 可選屬性,指定要注入到 XML 命名空間建立的 CorsFilter 中的 CorsConfigurationSource 的 bean 名稱。

<cors> 的父元素

<headers>

此元素允許組態設定要與回應一起傳送的其他(安全性)標頭。它啟用多個標頭的輕鬆組態設定,並允許透過 header 元素設定自訂標頭。其他資訊可以在參考的 安全性標頭章節中找到。

  • Cache-ControlPragmaExpires - 可以使用 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-PinningPublic-Key-Pinning-Report-Only - 可以使用 hpkp 元素設定。這允許 HTTPS 網站抵抗使用錯誤頒發或以其他方式欺詐性憑證的攻擊者進行的冒充。

  • Content-Security-PolicyContent-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> 的父元素

<cache-control>

新增 Cache-ControlPragmaExpires 標頭,以確保瀏覽器不會快取您的安全頁面。

<cache-control> 屬性

  • disabled 指定是否應停用快取控制。預設值為 false。

<cache-control> 的父元素

<hsts>

啟用後,會將 Strict-Transport-Security 標頭新增到任何安全請求的回應中。這允許伺服器指示瀏覽器自動使用 HTTPS 以用於未來的請求。

<hsts> 屬性

  • disabled 指定是否應停用 Strict-Transport-Security。預設值為 false。

  • include-sub-domains 指定是否應包含子網域。預設值為 true。

  • max-age-seconds 指定主機應被視為已知 HSTS 主機的最長時間。預設值為一年。

  • request-matcher-ref 用於確定是否應設定標頭的 RequestMatcher 實例。預設值為 HttpServletRequest.isSecure() 為 true 時。

  • preload 指定是否應包含 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> 屬性

  • policyPermissions-Policy 標頭寫入的原則值

<permissions-policy> 的父元素

<xss-protection>

X-XSS-Protection 標頭新增到回應中,以協助防範 反射式/Type-1 跨網站腳本 (XSS) 攻擊。這絕不是對 XSS 攻擊的全面保護!

<xss-protection> 屬性

<xss-protection> 的父元素

<content-type-options>

Add the X-Content-Type-Options header with the value of nosniff to the response. This disables MIME-sniffing for IE8+ and Chrome extensions.

<content-type-options> 屬性

  • disabled 指定是否應停用 Content Type Options。預設值為 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> 屬性

  • 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 給定的值開始,無論他們如何到達登入頁面。對應到 UsernamePasswordAuthenticationFilteralwaysUseDefaultTargetUrl 屬性。預設值為 false

  • authentication-details-source-ref 參考將由驗證篩選器使用的 AuthenticationDetailsSource

  • authentication-failure-handler-ref 可以用作 authentication-failure-url 的替代方案,讓您可以完全控制驗證失敗後的導航流程。該值應為應用程式上下文中 AuthenticationFailureHandler bean 的名稱。

  • authentication-failure-url 對應到 UsernamePasswordAuthenticationFilterauthenticationFailureUrl 屬性。定義登入失敗時瀏覽器將重新導向到的 URL。預設值為 /login?error,自動登入頁面產生器將自動處理該 URL,並使用錯誤訊息重新呈現登入頁面。

  • authentication-success-handler-ref 這可以用作 default-target-urlalways-use-default-target 的替代方案,讓您可以完全控制成功驗證後的導航流程。該值應為應用程式上下文中 AuthenticationSuccessHandler bean 的名稱。預設情況下,使用 SavedRequestAwareAuthenticationSuccessHandler 的實作,並注入 default-target-url

  • default-target-url 對應到 UsernamePasswordAuthenticationFilterdefaultTargetUrl 屬性。如果未設定,則預設值為 "/"(應用程式根目錄)。使用者登入後將被帶到此 URL,前提是他們在嘗試存取受保護資源時未被要求登入,在這種情況下,他們將被帶到原始請求的 URL。

  • login-page 應該用於呈現登入頁面的 URL。對應到 LoginUrlAuthenticationEntryPointloginFormUrl 屬性。預設值為 "/login"。

  • login-processing-url 對應到 UsernamePasswordAuthenticationFilterfilterProcessesUrl 屬性。預設值為 "/login"。

  • password-parameter 包含密碼的請求參數的名稱。預設值為 "password"。

  • username-parameter 包含使用者名稱的請求參數的名稱。預設值為 "username"。

  • authentication-success-forward-urlForwardAuthenticationSuccessHandler 對應到 UsernamePasswordAuthenticationFilterauthenticationSuccessHandler 屬性。

  • authentication-failure-forward-urlForwardAuthenticationFailureHandler 對應到 UsernamePasswordAuthenticationFilterauthenticationFailureHandler 屬性。

<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>

<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_basicclient_secret_postprivate_key_jwtclient_secret_jwtnone (公用用戶端)

  • authorization-grant-type OAuth 2.0 授權框架定義了四種 授權許可 類型。支援的值為 authorization_codeclient_credentialspassword,以及擴充許可類型 urn:ietf:params:oauth:grant-type:jwt-bearer

  • redirect-uri 用戶端註冊的重新導向 URI,在使用者驗證並授權存取用戶端後,授權伺服器 會將最終使用者的使用者代理重新導向到該 URI。

  • scope 用戶端在授權請求流程期間請求的 scope(s),例如 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 端點時使用的驗證方法。支援的值為 headerformquery

  • user-info-user-name-attribute 在 UserInfo 回應中傳回的屬性名稱,該屬性引用最終使用者的名稱或識別符。

  • issuer-uri 用於使用 OpenID Connect 提供者的 組態端點 或授權伺服器的 Metadata 端點 的探索,來初始設定 ClientRegistration 的 URI。

<oauth2-resource-server>

BearerTokenAuthenticationFilterBearerTokenAuthenticationEntryPointBearerTokenAccessDeniedHandler 添加到組態。此外,必須指定 <jwt><opaque-token> 其中之一。

<oauth2-resource-server> 的父元素

<oauth2-resource-server> 的子元素

<oauth2-resource-server> 屬性

  • authentication-manager-resolver-ref 參考到 AuthenticationManagerResolver,它將在請求時解析 AuthenticationManager

  • bearer-token-resolver-ref 參考到 BearerTokenResolver,它將從請求中檢索 bearer 權杖。

  • entry-point-ref 參考到 AuthenticationEntryPoint,它將處理未經授權的請求。

<jwt>

代表將授權 JWT 的 OAuth 2.0 資源伺服器。

<jwt> 的父元素

<jwt> 屬性

  • jwt-authentication-converter-ref 參考到 Converter<Jwt, AbstractAuthenticationToken>

  • jwt-decoder-ref 參考到 JwtDecoder。這是一個更大的元件,會覆寫 jwk-set-uri

  • jwk-set-uri 用於從 OAuth 2.0 授權伺服器載入簽章驗證金鑰的 JWK Set Uri。

<opaque-token>

代表將授權 opaque 權杖的 OAuth 2.0 資源伺服器。

<opaque-token> 的父元素

<opaque-token> 屬性

  • introspector-ref 參考到 OpaqueTokenIntrospector。這是一個更大的元件,會覆寫 introspection-uriclient-idclient-secret

  • introspection-uri 用於內省 opaque 權杖詳細資訊的 Introspection Uri。應與 client-idclient-secret 一起使用。

  • client-id 用於針對提供的 introspection-uri 進行用戶端驗證的用戶端 ID。

  • client-secret 用於針對提供的 introspection-uri 進行用戶端驗證的用戶端密碼。

  • authentication-converter-ref 參考到 OpaqueTokenAuthenticationConverter。負責將成功的內省結果轉換為 Authentication 實例。

<relying-party-registrations>

用於註冊到 SAML 2.0 身分提供者 (Identity Provider) 的信賴方 (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 聲明方 (asserting party) 中繼資料位置。

  • assertion-consumer-service-location AssertionConsumerService 位置。相當於信賴方的 <SPSSODescriptor><AssertionConsumerService Location="…​"/> 中找到的值。

  • assertion-consumer-service-binding AssertionConsumerService Binding。相當於信賴方的 <SPSSODescriptor><AssertionConsumerService Binding="…​"/> 中找到的值。支援的值為 POSTREDIRECT

  • single-logout-service-location SingleLogoutService 位置。相當於信賴方的 <SPSSODescriptor> 中 <SingleLogoutService Location="…​"/> 中找到的值。

  • single-logout-service-response-location SingleLogoutService ResponseLocation。相當於信賴方的 <SPSSODescriptor> 中 <SingleLogoutService ResponseLocation="…​"/> 中找到的值。

  • single-logout-service-binding SingleLogoutService Binding。相當於信賴方的 <SPSSODescriptor> 中 <SingleLogoutService Binding="…​"/> 中找到的值。支援的值為 POSTREDIRECT

  • 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-binding SingleSignOnService Binding。支援的值為 POSTREDIRECT

  • 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 Binding。相當於聲明方的 <IDPSSODescriptor> 中 <SingleLogoutService Binding="…​"/> 中找到的值。支援的值為 POSTREDIRECT

<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>

BasicAuthenticationFilterBasicAuthenticationEntryPoint 添加到組態。後者僅在未啟用表單式登入時,才會用作組態進入點。

<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 HTTP 方法,將與模式和 servlet 路徑(可選)結合使用,以比對傳入的請求。如果省略,則任何方法都將比對。如果使用和不使用方法指定相同的模式,則特定於方法的比對將優先。

  • pattern 定義 URL 路徑的模式。內容將取決於包含的 http 元素中的 request-matcher 屬性,因此如果 Spring MVC 在類別路徑中,則預設為 MVC 比對器。

  • request-matcher-ref 對將用於判斷是否使用此 <intercept-url>RequestMatcher 的參考。

  • requires-channel 可以是 "http" 或 "https",具體取決於特定 URL 模式應分別透過 HTTP 或 HTTPS 存取。或者,當沒有偏好時,可以使用值 "any"。如果任何 <intercept-url> 元素上存在此屬性,則 ChannelProcessingFilter 將被添加到篩選器堆疊,並且其額外的依賴項將被添加到應用程式上下文中。

如果添加了 <port-mappings> 組態,則 SecureChannelProcessorInsecureChannelProcessor bean 將使用它來判斷用於重新導向到 HTTP/HTTPS 的埠。

此屬性對於 filter-security-metadata-source 無效。
  • servlet-path servlet 路徑,將與模式和 HTTP 方法結合使用,以比對傳入的請求。僅當 request-matcher 為 'mvc' 時,此屬性才適用。此外,僅在以下 2 種使用案例中才需要該值:1) 在 ServletContext 中註冊了 2 個或更多 HttpServlet,它們的對應以 '/' 開頭且不同;2) 模式以註冊的 HttpServlet 路徑的相同值開始,不包括預設(根)HttpServlet '/'

此屬性對於 filter-security-metadata-source 無效。

<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 對應到 SecurityContextLogoutHandlerinvalidateHttpSession。預設值為 "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 服務提供者 (Service Provider) 的驗證支援。

<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 添加到堆疊。這反過來將根據屬性設定,使用 TokenBasedRememberMeServicesPersistentTokenBasedRememberMeServices 或使用者指定的實作 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" 屬性。

  • 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 對應到 AbstractRememberMeServicestokenValiditySeconds 屬性。指定「記住我」Cookie 應有效的期間,以秒為單位。預設情況下,它將有效 14 天。

  • user-service-ref 「記住我」服務實作需要存取 UserDetailsService,因此應用程式內容中必須定義一個。如果只有一個,命名空間配置將會自動選取並使用它。如果有多個實例,您可以使用此屬性明確指定 Bean id

<request-cache> 元素

設定 RequestCache 實例,ExceptionTranslationFilter 將使用它來儲存請求資訊,然後再調用 AuthenticationEntryPoint

<request-cache> 的父元素

<request-cache> 屬性

  • ref 定義對 RequestCache 的 Spring Bean 的參考。

<session-management>

Session-management 相關功能透過將 SessionManagementFilter 新增到篩選器堆疊來實作。

<session-management> 的父元素

<session-management> 屬性

  • authentication-strategy-explicit-invocation 將此屬性設定為 true 將表示 SessionManagementFilter 將不會被注入,並且需要明確調用 SessionAuthenticationStrategy。

  • invalid-session-url 設定此屬性將會使用以屬性值設定的 SimpleRedirectInvalidSessionStrategy 來注入 SessionManagementFilter。當提交無效的 Session 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",則會擲回例外狀況。

    如果啟用會期固定保護,則會使用適當設定的 DefaultSessionAuthenticationStrategy 注入 SessionManagementFilter。有關更多詳細資訊,請參閱此類別的 Javadoc。

<session-management> 的子元素

<concurrency-control>

新增對並行會期控制的支援,允許限制使用者可以擁有的活動會期數。將會建立 ConcurrentSessionFilter,並且 ConcurrentSessionControlAuthenticationStrategy 將與 SessionManagementFilter 一起使用。如果已宣告 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 對應到 ConcurrentSessionControlAuthenticationStrategymaximumSessions 屬性。指定 -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-refAuthenticationDetailsSource 的參考

  • 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

  • patternrequest-matcher 結合使用以建立 RequestMatcher 的模式

  • request-matcher-refRequestMatcher 的參考,該 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[introductory chapter
2. 此功能實際上只是為了方便而提供,並非用於生產環境(在生產環境中,將選擇一種檢視技術,並且可以使用該技術來呈現自訂的登入頁面)。類別 DefaultLoginPageGeneratingFilter 負責呈現登入頁面,並將為正常表單登入和/或 OIDC 提供登入表單(如果需要)。
3. 這不會影響 PersistentTokenBasedRememberMeServices 的使用,在 PersistentTokenBasedRememberMeServices 中,權杖儲存在伺服器端。