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
(或ReactiveUserDetailsService
WebFlux应用程序的情况)bean具有内存存储,单个用户具有生成的密码(请参阅SecurityProperties.User
用户的属性)。 - 基于表单的登录或HTTP基本安全性(取决于Content-Type)用于整个应用程序(如果执行器在类路径上,则包括执行器端点)。
- 一个
DefaultAuthenticationEventPublisher
用于发布身份验证事件。
你可以AuthenticationEventPublisher
通过为它添加一个bean 来提供不同的东西。
MVC安全性
默认安全配置在SecurityAutoConfiguration
和中 实现UserDetailsServiceAutoConfiguration
。SecurityAutoConfiguration
导入SpringBootWebSecurityConfiguration
Web安全性并 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
导入WebFluxSecurityConfiguration
Web安全性并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-uri
URI,它将其声明为其颁发者标识符。例如,如果 issuer-uri
提供的是“https://example.com”,`OpenID Provider Configuration Request则会进行“https://example.com/.well-known/openid-configuration”。结果预计是一个
OpenID Provider Configuration Response。以下示例显示如何使用以下命令配置OpenID Connect Provider
issuer-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参考指南”。