摘要:用于發布身份驗證事件的。導入用于安全,配置身份驗證,這在非應用程序中也是相關的。安全出于安全考慮,除和之外的所有默認禁用,屬性可用于啟用。有關保護的其他信息可以在參考指南中找到。
28. 安全
如果在類路徑上有Spring Security,那么web應用程序默認是安全的,Spring Boot依賴Spring Security的內容協商策略來決定是使用httpBasic還是formLogin,要向web應用程序添加方法級安全性,還可以使用所需的設置添加@EnableGlobalMethodSecurity,其他信息可以在Spring Security參考指南中找到。
默認的UserDetailsService只有一個用戶,用戶名是user,密碼是隨機的,在應用程序啟動時在INFO級別打印,如下例所示:
Using generated security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35
如果你對日志配置進行了微調,請確保org.springframework.boot.autoconfigure.security類別設置為記錄INFO級別的消息,否則,不會打印默認密碼。
你可以通過提供spring.security.user.name和spring.security.user.password來更改用戶名和密碼。
你在web應用程序中默認獲得的基本特性是:
使用內存存儲的UserDetailsService(或WebFlux應用程序下的ReactiveUserDetailsService) bean和使用生成密碼的單個用戶(參見SecurityProperties.User)的屬性。
整個應用程序基于表單的登錄或HTTP Basic Security(取決于內容類型)(如果執行器在類路徑上,則包括執行器端點)。
用于發布身份驗證事件的DefaultAuthenticationEventPublisher。
你可以通過添加bean來提供不同的AuthenticationEventPublisher。
28.1 MVC Security默認的security配置在SecurityAutoConfiguration和UserDetailsServiceAutoConfiguration中實現,SecurityAutoConfiguration導入SpringBootWebSecurityConfiguration用于web安全,UserDetailsServiceAutoConfiguration配置身份驗證,這在非web應用程序中也是相關的,要完全關閉默認的web應用程序安全配置,可以添加WebSecurityConfigurerAdapter類型的bean(這樣做不會禁用UserDetailsService配置或執行器的安全)。
要關閉UserDetailsService配置,可以添加UserDetailsService、AuthenticationProvider或AuthenticationManager類型的bean,在Spring Boot示例中有幾個安全的應用程序可以讓你從常見的用例開始。
可以通過添加自定義的WebSecurityConfigurerAdapter來覆蓋訪問規則,Spring Boot提供了方便的方法,可用于覆蓋執行器端點和靜態資源的訪問規則,可以使用EndpointRequest創建一個基于management.endpoints.web.base-path屬性的RequestMatcher,PathRequest可用于為常用位置的資源創建RequestMatcher。
28.2 WebFlux Security與Spring MVC應用程序類似,你可以通過添加Spring-boot-starter-security依賴項來保護WebFlux應用程序,默認的security配置在ReactiveSecurityAutoConfiguration和UserDetailsServiceAutoConfiguration中實現。ReactiveSecurityAutoConfiguration導入WebFluxSecurityConfiguration用于web安全,UserDetailsServiceAutoConfiguration配置身份驗證,這在非web應用程序中也是相關的。要完全關閉默認的web應用程序安全配置,可以添加WebFilterChainProxy類型的bean(這樣做不會禁用UserDetailsService配置或執行器的安全)。
為了關閉UserDetailsService配置,你可以添加一個類型為ReactiveUserDetailsService或ReactiveAuthenticationManager的bean。
可以通過添加自定義SecurityWebFilterChain來配置訪問規則,Spring Boot提供了方便的方法,可用于覆蓋執行器端點和靜態資源的訪問規則,可以使用EndpointRequest創建一個基于management.endpoints.web.base-path屬性的ServerWebExchangeMatcher。
PathRequest可用于為常用位置的資源創建ServerWebExchangeMatcher。
例如,你可以通過添加以下內容來定制你的security配置:
@Bean public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) { return http .authorizeExchange() .matchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() .pathMatchers("/foo", "/bar") .authenticated().and() .formLogin().and() .build(); }28.3 OAuth2
OAuth2是Spring支持的廣泛使用的授權框架。
28.3.1 客戶端如果你的類路徑中有spring-security-oauth2-client,那么可以利用一些自動配置來輕松地設置OAuth2客戶端,這個配置使用OAuth2ClientProperties下的屬性。
你可以在spring.security.oauth2.client前綴下注冊多個OAuth2客戶端和提供者,如下例所示:
spring.security.oauth2.client.registration.my-client-1.client-id=abcd spring.security.oauth2.client.registration.my-client-1.client-secret=password spring.security.oauth2.client.registration.my-client-1.client-name=Client for user scope spring.security.oauth2.client.registration.my-client-1.provider=my-oauth-provider spring.security.oauth2.client.registration.my-client-1.scope=user spring.security.oauth2.client.registration.my-client-1.redirect-uri-template=http://my-redirect-uri.com spring.security.oauth2.client.registration.my-client-1.client-authentication-method=basic spring.security.oauth2.client.registration.my-client-1.authorization-grant-type=authorization_code spring.security.oauth2.client.registration.my-client-2.client-id=abcd spring.security.oauth2.client.registration.my-client-2.client-secret=password spring.security.oauth2.client.registration.my-client-2.client-name=Client for email scope spring.security.oauth2.client.registration.my-client-2.provider=my-oauth-provider spring.security.oauth2.client.registration.my-client-2.scope=email spring.security.oauth2.client.registration.my-client-2.redirect-uri-template=http://my-redirect-uri.com spring.security.oauth2.client.registration.my-client-2.client-authentication-method=basic spring.security.oauth2.client.registration.my-client-2.authorization-grant-type=authorization_code spring.security.oauth2.client.provider.my-oauth-provider.authorization-uri=http://my-auth-server/oauth/authorize spring.security.oauth2.client.provider.my-oauth-provider.token-uri=http://my-auth-server/oauth/token spring.security.oauth2.client.provider.my-oauth-provider.user-info-uri=http://my-auth-server/userinfo spring.security.oauth2.client.provider.my-oauth-provider.jwk-set-uri=http://my-auth-server/token_keys spring.security.oauth2.client.provider.my-oauth-provider.user-name-attribute=name
默認情況下,Spring Security的OAuth2LoginAuthenticationFilter只處理匹配/login/oauth2/code/*的url,如果你想定制redirect-uri-template來使用不同的模式,你需要提供配置來處理定制模式,例如,你可以添加類似于以下內容的WebSecurityConfigurerAdapter:
public class OAuth2LoginSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() .oauth2Login() .redirectionEndpoint() .baseUri("/custom-callback"); } }
對于普通的OAuth2和OpenID提供者,包括谷歌、Github、Facebook和Okta,我們提供了一組提供者默認值(google、github、facebook和Okta)。
如果你不需要定制這些提供者,你可以將提供者屬性設置為你需要推斷默認值的提供者屬性,另外,如果客戶端的ID與默認支持的提供程序匹配,Spring Boot也會推斷出這一點。
換句話說,下面示例中的兩個配置使用谷歌提供程序:
spring.security.oauth2.client.registration.my-client.client-id=abcd spring.security.oauth2.client.registration.my-client.client-secret=password spring.security.oauth2.client.registration.my-client.provider=google spring.security.oauth2.client.registration.google.client-id=abcd spring.security.oauth2.client.registration.google.client-secret=password28.3.2 服務器
目前,Spring Security不支持實現OAuth 2.0授權服務器或資源服務器,但是,這個功能可以從Spring Security OAuth項目中獲得,該項目最終將被Spring Security完全取代,在此之前,你可以使用spring-security-oauth2-autoconfigure模塊輕松設置OAuth 2.0服務器,有關說明,請參閱其文檔。
28.4 Actuator安全出于安全考慮,除/health和/info之外的所有Actuator默認禁用,management.endpoints.web.exposure.include屬性可用于啟用actuator。
如果在類路徑上有Spring Security,并且沒有其他WebSecurityConfigurerAdapter存在,actuator是通過Spring Boot自動配置來保護的,如果你定義了一個自定義的WebSecurityConfigurerAdapter,Spring Boot自動配置將退出,你將完全控制actuator訪問規則。
在設置management.endpoints.web.exposure.include之前,確保暴露的actuator不包含敏感信息和/或通過將它們置于防火墻后或通過類似Spring Security的方式進行安全保護。28.4.1 跨站請求偽造保護
由于Spring Boot依賴于Spring Security的默認值,所以CSRF保護默認打開,這意味著,當使用默認安全配置時,需要POST(關閉和日志記錄器端點)、PUT或DELETE的actuator端點將收到403禁止錯誤。
我們建議,只有在創建非瀏覽器客戶端使用的服務時,才完全禁用CSRF保護。
有關CSRF保護的其他信息可以在Spring Security參考指南中找到。
上一篇:開發Web應用程序文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/77372.html
摘要:參考指南使你可以輕松地創建可運行的獨立的生產級的基于的應用程序,我們對平臺和第三方庫有自己的看法,這樣你就可以以最低限度工作開始了,大多數應用程序都需要很少的配置。文檔本節簡要概述了參考文檔,它充當文檔其余部分的映射。 Spring Boot 參考指南 Spring Boot使你可以輕松地創建可運行的獨立的、生產級的基于Spring的應用程序,我們對Spring平臺和第三方庫有自己的看...
摘要:我們的主要目標是為所有開發提供一個非常快的廣泛可訪問的入門體驗。要跳出固有的思維模式,但是當需求開始偏離默認設置時,要迅速避開。提供大型項目如嵌入式服務器安全性指標健康檢查和外部化配置所共有的一系列非功能特性。系統要求需要或和或以上。 8. Spring Boot介紹 Spring Boot使你可以輕松地創建可運行的獨立的、生產級的基于Spring的應用程序,我們對Spring平臺和第...
摘要:一旦最基本的應用創建好了,你可以給他加上安全防護。一旦成功登出了,我們的應用程序重定向到到并顯示相應的登陸成功的消息。這標記該應用程序是一個應用程序,并激活一些關鍵行為,比如創建一個。一旦應用程序啟動,用瀏覽器訪問。 原網頁 https://spring.io/guides/gs/securing-web/ 本指南將引導您完成創建一個資源由Spring Security的保護的一個簡單...
摘要:安裝可以使用手動安裝命令行接口或如果你是用戶,可以使用或。有關全面的安裝說明,請參閱開始部分中的第節,安裝。推斷抓取依賴項標準包含一個注解,它允許你聲明對第三方庫的依賴關系,這個有用的技術讓可以像或那樣下載,但不需要你使用構建工具。 第VII章. Spring Boot CLI 如果你想快速開發Spring應用程序,可以使用Spring Boot CLI命令行工具,它允許你運行Groo...
摘要:使用事務管理器是支持的一個流行的開源事務管理器實現,你可以使用啟動器向項目添加適當的依賴項,與和一樣,將自動配置并對進行后處理,以確保啟動和關閉順序是正確的。 37. 用JTA分布式事務 通過使用Atomikos或Bitronix嵌入式事務管理器,Spring Boot支持跨多個XA資源的分布式JTA事務,在部署到合適的Java EE應用服務器時也支持JTA事務。 當檢測到JTA環境時...
閱讀 1803·2021-11-18 10:02
閱讀 3531·2021-11-16 11:45
閱讀 1796·2021-09-10 10:51
閱讀 2113·2019-08-30 15:43
閱讀 1383·2019-08-30 11:23
閱讀 1491·2019-08-29 11:07
閱讀 1897·2019-08-23 17:05
閱讀 1423·2019-08-23 16:14