Web 應用程式安全

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

  • use-authorization-manager 使用此 AuthorizationManager 而不是從 <intercept-url> 元素派生一個

  • access-decision-manager-ref 可選屬性,指定應用於授權 HTTP 請求的 AccessDecisionManager 實現的 ID。預設情況下,使用帶有 RoleVoterAuthenticatedVoterAffirmativeBased 實現。

  • authentication-manager-ref 引用此 http 元素建立的 FilterChain 所使用的 AuthenticationManager

  • observation-registry-ref 對用於 FilterChain 和相關元件的 ObservationRegistry 的引用。

  • auto-config 自動註冊登入表單、基本認證、登出服務。如果設定為 "true",則新增所有這些功能(儘管您仍然可以透過提供相應的元素來定製每個配置)。如果未指定,則預設為 "false"。不建議使用此屬性。請使用顯式配置元素以避免混淆。

  • create-session 控制 Spring Security 類建立 HTTP 會話的急切程度。選項包括

    • always - 如果不存在會話,Spring Security 將主動建立一個會話。

    • ifRequired - Spring Security 僅在需要時才建立會話(預設值)。

    • never - Spring Security 永遠不會建立會話,但如果應用程式建立,則會使用會話。

    • stateless - Spring Security 不會建立會話,並忽略會話以獲取 Spring Authentication

  • 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 對應於 FilterSecurityInterceptorobserveOncePerRequest 屬性。預設為 false

  • filter-all-dispatcher-types 對應於 AuthorizationFiltershouldFilterAllDispatcherTypes 屬性。當 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 定義 FilterChainProxyintercept-url 建立的 bean 中用於匹配傳入請求的 RequestMatcher 策略。選項當前為 mvcantregexciRegex,分別對應 Spring MVC、ant、正則表示式和不區分大小寫的正則表示式。為每個 intercept-url 元素使用其 patternmethodservlet-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 注入到 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 存在,它將嘗試查詢其 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 將響應從宣告的 content-type 進行 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 指定是否應包含預載入。預設值為 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>

pin 列表

<pins> 的子元素

<pin>

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> 的父元素

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

  • 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,它將由自動登入頁面生成器自動處理,重新渲染帶有錯誤訊息的登入頁面。

  • 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 客戶端在授權請求流程中請求的範圍,例如 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 提供者的 配置端點 或授權伺服器的 元資料端點 發現來配置 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,它將從請求中檢索不記名令牌。這不能與 authentication-converter-ref 結合使用。

  • entry-point-ref 引用一個 AuthenticationEntryPoint,它將處理未經授權的請求。

  • authentication-converter-ref 引用一個 AuthenticationConverter,它將請求轉換為認證。這不能與 bearer-token-resolver-ref 結合使用。

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

表示將授權不透明令牌的 OAuth 2.0 資源伺服器

<opaque-token> 的父元素

<opaque-token> 屬性

  • introspector-ref 引用一個 OpaqueTokenIntrospector。這是一個更大的元件,它會覆蓋 introspection-uriclient-idclient-secret

  • introspection-uri 用於內省不透明令牌詳細資訊的內省 URI。應與 client-idclient-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 斷言方元資料位置。

  • assertion-consumer-service-location AssertionConsumerService Location。等同於依賴方的 <SPSSODescriptor><AssertionConsumerService Location="…​"/> 的值。

  • assertion-consumer-service-binding AssertionConsumerService Binding。等同於依賴方的 <SPSSODescriptor><AssertionConsumerService Binding="…​"/> 的值。支援的值為 POSTREDIRECT

  • single-logout-service-location SingleLogoutService Location。等同於依賴方的 <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 繫結。支援的值為 POSTREDIRECT

  • signing-algorithms 此斷言方的 org.opensaml.saml.ext.saml2alg.SigningMethod 演算法列表,按優先順序排序。

  • single-logout-service-location SingleLogoutService Location。等同於斷言方的 <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 將與模式和 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> 配置,這將由 SecureChannelProcessorInsecureChannelProcessor bean 使用,以確定重定向到 HTTP/HTTPS 所使用的埠。

此屬性對 filter-security-metadata-source 無效。
  • servlet-path 將與模式和 HTTP 方法結合使用以匹配傳入請求的 servlet 路徑。此屬性僅在 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 引用一個使用者服務(或 UserDetailsService bean)ID。

<logout>

向過濾器堆疊新增 LogoutFilter。它配置了 SecurityContextLogoutHandler

<logout> 的父元素

<logout> 屬性

  • delete-cookies 使用者登出時應刪除的 cookie 名稱的逗號分隔列表。

  • invalidate-session 對映到 SecurityContextLogoutHandlerinvalidateHttpSession。預設為 "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 斷言方可以傳送 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-refDataSource bean 的引用。如果設定此項,將使用 PersistentTokenBasedRememberMeServices 並配置一個 JdbcTokenRepositoryImpl 例項。

  • remember-me-parameter 切換記住我認證的請求引數名稱。預設為 "remember-me"。對映到 AbstractRememberMeServices 的 "parameter" 屬性。

  • key 對映到 AbstractRememberMeServices 的 "key" 屬性。應該設定為一個唯一值,以確保記住我 (remember-me) 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>

會話管理相關功能透過在過濾器堆疊中新增 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> 的子元素

<concurrency-control>

新增對併發會話控制的支援,允許限制使用者可以擁有的活動會話數。將建立一個 ConcurrentSessionFilter,並結合 SessionManagementFilter 使用 ConcurrentSessionControlAuthenticationStrategy。如果已宣告 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 對映到 ConcurrentSessionControlAuthenticationStrategymaximumSessions 屬性。將值指定為 -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-refAuthenticationDetailsSource 的引用

  • 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 一個逗號分隔的 Spring bean 引用列表,這些 bean 實現 Filter。值 "none" 表示此 FilterChain 不應使用任何 Filter

  • 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[介紹性章節
2. 此功能實際上只是為了方便而提供,並非用於生產(在生產環境中,將選擇並使用檢視技術來呈現自定義登入頁面)。DefaultLoginPageGeneratingFilter 類負責渲染登入頁面,並根據需要提供普通表單登入和/或 OIDC 的登入表單。
3. 這不影響 PersistentTokenBasedRememberMeServices 的使用,因為令牌儲存在伺服器端。
© . This site is unofficial and not affiliated with VMware.