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