资讯专栏INFORMATION COLUMN

Spring Boot 参考指南(安全)

XanaHopper / 3546人阅读

摘要:用于发布身份验证事件的。导入用于安全,配置身份验证,这在非应用程序中也是相关的。安全出于安全考虑,除和之外的所有默认禁用,属性可用于启用。有关保护的其他信息可以在参考指南中找到。

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.namespring.security.user.password来更改用户名和密码。

你在web应用程序中默认获得的基本特性是:

使用内存存储的UserDetailsService(或WebFlux应用程序下的ReactiveUserDetailsService) bean和使用生成密码的单个用户(参见SecurityProperties.User)的属性。

整个应用程序基于表单的登录或HTTP Basic Security(取决于内容类型)(如果执行器在类路径上,则包括执行器端点)。

用于发布身份验证事件的DefaultAuthenticationEventPublisher

你可以通过添加bean来提供不同的AuthenticationEventPublisher

28.1 MVC Security

默认的security配置在SecurityAutoConfigurationUserDetailsServiceAutoConfiguration中实现,SecurityAutoConfiguration导入SpringBootWebSecurityConfiguration用于web安全,UserDetailsServiceAutoConfiguration配置身份验证,这在非web应用程序中也是相关的,要完全关闭默认的web应用程序安全配置,可以添加WebSecurityConfigurerAdapter类型的bean(这样做不会禁用UserDetailsService配置或执行器的安全)。

要关闭UserDetailsService配置,可以添加UserDetailsServiceAuthenticationProviderAuthenticationManager类型的bean,在Spring Boot示例中有几个安全的应用程序可以让你从常见的用例开始。

可以通过添加自定义的WebSecurityConfigurerAdapter来覆盖访问规则,Spring Boot提供了方便的方法,可用于覆盖执行器端点和静态资源的访问规则,可以使用EndpointRequest创建一个基于management.endpoints.web.base-path属性的RequestMatcherPathRequest可用于为常用位置的资源创建RequestMatcher

28.2 WebFlux Security

与Spring MVC应用程序类似,你可以通过添加Spring-boot-starter-security依赖项来保护WebFlux应用程序,默认的security配置在ReactiveSecurityAutoConfigurationUserDetailsServiceAutoConfiguration中实现。ReactiveSecurityAutoConfiguration导入WebFluxSecurityConfiguration用于web安全,UserDetailsServiceAutoConfiguration配置身份验证,这在非web应用程序中也是相关的。要完全关闭默认的web应用程序安全配置,可以添加WebFilterChainProxy类型的bean(这样做不会禁用UserDetailsService配置或执行器的安全)。

为了关闭UserDetailsService配置,你可以添加一个类型为ReactiveUserDetailsServiceReactiveAuthenticationManager的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、facebookOkta)。

如果你不需要定制这些提供者,你可以将提供者属性设置为你需要推断默认值的提供者属性,另外,如果客户端的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
28.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(关闭和日志记录器端点)、PUTDELETE的actuator端点将收到403禁止错误。

我们建议,只有在创建非浏览器客户端使用的服务时,才完全禁用CSRF保护。

有关CSRF保护的其他信息可以在Spring Security参考指南中找到。

上一篇:开发Web应用程序

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77372.html

相关文章

  • Spring Boot 参考指南(目录)

    摘要:参考指南使你可以轻松地创建可运行的独立的生产级的基于的应用程序,我们对平台和第三方库有自己的看法,这样你就可以以最低限度工作开始了,大多数应用程序都需要很少的配置。文档本节简要概述了参考文档,它充当文档其余部分的映射。 Spring Boot 参考指南 Spring Boot使你可以轻松地创建可运行的独立的、生产级的基于Spring的应用程序,我们对Spring平台和第三方库有自己的看...

    awesome23 评论0 收藏0
  • Spring Boot 参考指南Spring Boot介绍)

    摘要:我们的主要目标是为所有开发提供一个非常快的广泛可访问的入门体验。要跳出固有的思维模式,但是当需求开始偏离默认设置时,要迅速避开。提供大型项目如嵌入式服务器安全性指标健康检查和外部化配置所共有的一系列非功能特性。系统要求需要或和或以上。 8. Spring Boot介绍 Spring Boot使你可以轻松地创建可运行的独立的、生产级的基于Spring的应用程序,我们对Spring平台和第...

    GraphQuery 评论0 收藏0
  • [译]Spring入门 - Web应用程序安全

    摘要:一旦最基本的应用创建好了,你可以给他加上安全防护。一旦成功登出了,我们的应用程序重定向到到并显示相应的登陆成功的消息。这标记该应用程序是一个应用程序,并激活一些关键行为,比如创建一个。一旦应用程序启动,用浏览器访问。 原网页 https://spring.io/guides/gs/securing-web/ 本指南将引导您完成创建一个资源由Spring Security的保护的一个简单...

    AlexTuan 评论0 收藏0
  • Spring Boot 参考指南(安装CLI)

    摘要:安装可以使用手动安装命令行接口或如果你是用户,可以使用或。有关全面的安装说明,请参阅开始部分中的第节,安装。推断抓取依赖项标准包含一个注解,它允许你声明对第三方库的依赖关系,这个有用的技术让可以像或那样下载,但不需要你使用构建工具。 第VII章. Spring Boot CLI 如果你想快速开发Spring应用程序,可以使用Spring Boot CLI命令行工具,它允许你运行Groo...

    Moxmi 评论0 收藏0
  • Spring Boot 参考指南(使用JTA分布式事务)

    摘要:使用事务管理器是支持的一个流行的开源事务管理器实现,你可以使用启动器向项目添加适当的依赖项,与和一样,将自动配置并对进行后处理,以确保启动和关闭顺序是正确的。 37. 用JTA分布式事务 通过使用Atomikos或Bitronix嵌入式事务管理器,Spring Boot支持跨多个XA资源的分布式JTA事务,在部署到合适的Java EE应用服务器时也支持JTA事务。 当检测到JTA环境时...

    silenceboy 评论0 收藏0

发表评论

0条评论

XanaHopper

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<