若是在类路径上有Spring Security,那么web应用程序默认是安全的,Spring Boot依赖Spring Security的内容协商策略来决定是使用httpBasic
仍是formLogin
,要向web应用程序添加方法级安全性,还可使用所需的设置添加@EnableGlobalMethodSecurity
,其余信息能够在Spring Security参考指南中找到。html
默认的UserDetailsService
只有一个用户,用户名是user,密码是随机的,在应用程序启动时在INFO级别打印,以下例所示:git
Using generated security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35
若是你对日志配置进行了微调,请确保org.springframework.boot.autoconfigure.security
类别设置为记录INFO
级别的消息,不然,不会打印默认密码。
你能够经过提供spring.security.user.name
和spring.security.user.password
来更改用户名和密码。github
你在web应用程序中默认得到的基本特性是:web
UserDetailsService
(或WebFlux应用程序下的ReactiveUserDetailsService
) bean和使用生成密码的单个用户(参见SecurityProperties.User)的属性。DefaultAuthenticationEventPublisher
。你能够经过添加bean来提供不一样的AuthenticationEventPublisher
。spring
默认的security配置在SecurityAutoConfiguration
和UserDetailsServiceAutoConfiguration
中实现,SecurityAutoConfiguration
导入SpringBootWebSecurityConfiguration
用于web安全,UserDetailsServiceAutoConfiguration
配置身份验证,这在非web应用程序中也是相关的,要彻底关闭默认的web应用程序安全配置,能够添加WebSecurityConfigurerAdapter
类型的bean(这样作不会禁用UserDetailsService
配置或执行器的安全)。segmentfault
要关闭UserDetailsService
配置,能够添加UserDetailsService
、AuthenticationProvider
或AuthenticationManager
类型的bean,在Spring Boot示例中有几个安全的应用程序可让你从常见的用例开始。api
能够经过添加自定义的WebSecurityConfigurerAdapter
来覆盖访问规则,Spring Boot提供了方便的方法,可用于覆盖执行器端点和静态资源的访问规则,可使用EndpointRequest
建立一个基于management.endpoints.web.base-path
属性的RequestMatcher
,PathRequest
可用于为经常使用位置的资源建立RequestMatcher
。浏览器
与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(); }
OAuth2是Spring支持的普遍使用的受权框架。
若是你的类路径中有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=password
目前,Spring Security不支持实现OAuth 2.0受权服务器或资源服务器,可是,这个功能能够从Spring Security OAuth项目中得到,该项目最终将被Spring Security彻底取代,在此以前,你可使用spring-security-oauth2-autoconfigure
模块轻松设置OAuth 2.0服务器,有关说明,请参阅其文档。
出于安全考虑,除/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的方式进行安全保护。
因为Spring Boot依赖于Spring Security的默认值,因此CSRF保护默认打开,这意味着,当使用默认安全配置时,须要POST(关闭和日志记录器端点)、PUT
或DELETE
的actuator端点将收到403禁止错误。
咱们建议,只有在建立非浏览器客户端使用的服务时,才彻底禁用CSRF保护。
有关CSRF保护的其余信息能够在Spring Security参考指南中找到。