Security(安全)
如果Spring Security位于类路径上,则默认情况下Web应用程序是安全的。Spring Boot依赖于Spring Security的内容协商策略来确定是否使用httpBasic或formLogin。要向Web应用程序添加方法级安全性,您还可以@EnableGlobalMethodSecurity使用所需的设置进行添加。其他信息可以在 Spring Security Reference Guide中找到。
默认设置UserDetailsService只有一个用户。用户名是user,密码是随机的,在应用程序启动时以INFO级别打印,如以下示例所示:
1 | 使用生成的安全密码:78fa095d-3f4c-48b1-ad50-e24c31d5cf35 |
如果您对日志记录配置进行微调,请确保将
org.springframework.boot.autoconfigure.security类别设置为logINFO-level messages。否则,不会打印默认密码。
您可以通过提供spring.security.user.name和 更改用户名和密码spring.security.user.password。
您在Web应用程序中默认获得的基本功能包括:
- A
UserDetailsService(或ReactiveUserDetailsServiceWebFlux应用程序的情况)bean具有内存存储,单个用户具有生成的密码(请参阅SecurityProperties.User用户的属性)。 - 基于表单的登录或HTTP基本安全性(取决于Content-Type)用于整个应用程序(如果执行器在类路径上,则包括执行器端点)。
- 一个
DefaultAuthenticationEventPublisher用于发布身份验证事件。
你可以AuthenticationEventPublisher通过为它添加一个bean 来提供不同的东西。
MVC安全性
默认安全配置在SecurityAutoConfiguration和中 实现UserDetailsServiceAutoConfiguration。SecurityAutoConfiguration导入SpringBootWebSecurityConfigurationWeb安全性并 UserDetailsServiceAutoConfiguration配置身份验证,这也与非Web应用程序相关。要完全关闭默认Web应用程序安全配置,您可以添加类型的bean WebSecurityConfigurerAdapter(这样做不会禁用UserDetailsService配置或Actuator的安全性)。
为了还关闭UserDetailsService的配置,您可以添加类型的豆 UserDetailsService,AuthenticationProvider或AuthenticationManager。Spring Boot示例中有几个安全的应用程序可以帮助您开始使用常见的用例。
可以通过添加自定义来覆盖访问规则WebSecurityConfigurerAdapter。Spring Boot提供了便捷方法,可用于覆盖执行器端点和静态资源的访问规则。EndpointRequest可用于创建RequestMatcher 基于management.endpoints.web.base-path属性的。 PathRequest可用于RequestMatcher在常用位置创建资源。
WebFlux安全性
与Spring MVC应用程序类似,您可以通过添加spring-boot-starter-security依赖项来保护WebFlux应用程序。默认安全配置在ReactiveSecurityAutoConfiguration和中 实现UserDetailsServiceAutoConfiguration。ReactiveSecurityAutoConfiguration导入WebFluxSecurityConfigurationWeb安全性并UserDetailsServiceAutoConfiguration 配置身份验证,这也与非Web应用程序相关。要完全关闭默认Web应用程序安全配置,您可以添加类型的bean WebFilterChainProxy(这样做不会禁用UserDetailsService配置或Actuator的安全性)。
要关闭UserDetailsService配置,可以添加类型为ReactiveUserDetailsService或的bean ReactiveAuthenticationManager。
可以通过添加自定义来配置访问规则SecurityWebFilterChain。Spring Boot提供了便捷方法,可用于覆盖执行器端点和静态资源的访问规则。EndpointRequest可用于创建 ServerWebExchangeMatcher基于management.endpoints.web.base-path 属性的。
PathRequest可用于ServerWebExchangeMatcher在常用位置创建资源。
例如,您可以通过添加以下内容来自定义安全配置:
1 |
|
OAuth2
OAuth2是Spring支持的一种广泛使用的授权框架。
客户端
如果您具有spring-security-oauth2-client类路径,则可以利用某些自动配置来轻松设置OAuth2 / Open ID Connect客户端。此配置使用下的属性OAuth2ClientProperties。相同的属性适用于servlet和反应式应用程序。
您可以在spring.security.oauth2.client前缀下注册多个OAuth2客户端和提供程序 ,如以下示例所示:
1 | spring.security.oauth2.client.registration.my-client-1.client-id=abcd |
对于支持OpenID Connect发现的 OpenID Connect提供程序,可以进一步简化配置。需要为提供程序配置一个issuer-uriURI,它将其声明为其颁发者标识符。例如,如果 issuer-uri提供的是“https://example.com”,`OpenID Provider Configuration Request则会进行“https://example.com/.well-known/openid-configuration”。结果预计是一个OpenID Provider Configuration Response。以下示例显示如何使用以下命令配置OpenID Connect Providerissuer-uri`:
1 | spring.security.oauth2.client.provider.oidc-provider.issuer-uri = https://dev-123456.oktapreview.com/oauth2/default/ |
默认情况下,Spring Security OAuth2LoginAuthenticationFilter仅处理URL匹配/login/oauth2/code/*。如果要自定义redirect-uri以使用其他模式,则需要提供配置以处理该自定义模式。例如,对于servlet应用程序,您可以添加WebSecurityConfigurerAdapter类似于以下内容的应用程序:
1 | public class OAuth2LoginSecurityConfig extends WebSecurityConfigurerAdapter { |
OAuth2客户端注册常见providers
对于常见的OAuth2和OpenID提供商,包括谷歌,Github上,Facebook和1563,我们提供了一组供应商默认的(google,github,facebook,和okta,分别)。
如果您不需要自定义这些提供程序,则可以将provider属性设置为需要推断默认值的属性。此外,如果客户端注册的密钥与默认支持的提供程序匹配,则Spring Boot也会推断出。
换句话说,以下示例中的两个配置使用Google提供程序:
1 | spring.security.oauth2.client.registration.my-client.client-id = abcd |
Resource Server(资源服务器)
如果您具有spring-security-oauth2-resource-server类路径,则只要指定了JWK Set URI或OIDC Issuer URI,Spring Boot就可以设置OAuth2资源服务器,如以下示例所示:
1 | spring.security.oauth2.resourceserver.jwt.jwk-set-uri = https://example.com/oauth2/default/v1/keys |
1 | spring.security.oauth2.resourceserver.jwt.issuer-uri = https://dev-123456.oktapreview.com/oauth2/default/ |
相同的属性适用于servlet和反应应用程序。
或者,您可以JwtDecoder为servlet应用程序或ReactiveJwtDecoder响应应用程序定义自己的bean 。
Authorization Server(授权服务器)
目前,Spring Security不支持实施OAuth 2.0授权服务器。但是,此功能可从Spring Security OAuth项目获得,该项目最终将完全被Spring Security取代。在此之前,您可以使用该spring-security-oauth2-autoconfigure模块轻松设置OAuth 2.0授权服务器; 请参阅其文档以获取说明
Actuator Security(执行器安全性)
出于安全考虑,默认情况下除了/health和/info禁用所有执行器。该management.endpoints.web.exposure.include属性可用于启用执行器。
如果春季安全是在类路径上,并没有其他WebSecurityConfigurerAdapter存在,比其他所有的驱动器/health,并/info通过春天开机自动配置安全。如果您定义自定义WebSecurityConfigurerAdapter,Spring Boot自动配置将退回,您将完全控制执行器访问规则。
在设置之前
management.endpoints.web.exposure.include,请确保暴露的执行器不包含敏感信息和/或通过将它们放在防火墙后面或通过Spring Security等方式进行保护。
跨站点请求伪造保护
由于Spring Boot依赖于Spring Security的默认值,因此默认情况下会启用CSRF保护。这意味着执行器端点需要POST(关闭和记录器端点),PUT或者DELETE在使用默认安全配置时将获得403禁止错误。
我们建议仅在创建非浏览器客户端使用的服务时才完全禁用CSRF保护。
有关CSRF保护的其他信息,请参阅“ Spring Security参考指南”。