简介
如果在classpath上设置了spring 安全,默认的话其web 也是安全的。springboot依赖于spring 的安全声明策略决定是使用httpBasic
或者 formLogin
,添加web应用的安全等级方法,可以使用@EnableGlobalMethodSecurity
添加你想要的配置。
默认的认证管理是拥有一个单独的用户。如下所示:
Using generated security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35
可以通过提供spring.security.user.name
与spring.security.user.password
改变其用户和密码。
默认的安全配置是通过SecurityAutoConfiguration
实现(同时也包括非web应用程序)。关闭默认的安全配置,可以通过添加一个WebSecurityConfigurerAdapter
类型的bean实现。
关闭认证管理配置,可以通过添加 UserDetailsService
, AuthenticationProvider
与 AuthenticationManager
的类型。
在一个web应用程序中,你默认得到的一个基础特性是:
-
一个
UserDetailsService
bean(在内存中存储以及一个产生密码的word) - 基于表格的登录或者是基于整个http的安全认证要求(包括执行者的点)。
可以通过添加一个自定义的WebSecurityConfigurerAdapter去覆盖其规则。spring boot对actuator endpoints于静态资源提供了便利的方法去处理。
EndpointRequest
能够创建一个基于management.endpoints.web.base-path
的属性。StaticResourceRequest
能够给创建一个指定静态资源位置的 RequestMatcher
。
OAuth2
其是一种被spring广泛支持的授权框架。
客户端
如果你有
spring-security-oauth2-client
,你就可以充分利用其自动配置简化安装oauth2的客户端。这充分利用其 OAuth2ClientProperties
的配置属性,你可以通过使用 spring.security.oauth2.client
前缀注册客户端:代码如下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/*
.匹配的URI。如果想要自定义话一个不同的redirect-uri-template
,需要提供自定义模式的处理配置,如下代码public class OAuth2LoginSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.oauth2Login()
.redirectionEndpoint()
.baseUri("/custom-callback");
}
}
对于一些通用的OAuth2 ( Google, Github, Facebook, 与Okta),我们提供了许多默认的提供者。
执行者安全
如果执行者也是在使用中,你可以看到:
- 管理终端也是安全的,即使应用终端不是安全的。
- 安全事件被转换为审计实例并且被保存到审计存储库中。
- 默认用户在拥有
ACTUATOR
角色的同时也拥有user的角色
其ACTUATOR的安全特性可以通过外部文件进行修改。覆盖应用程序的链接规则,但是不是actuator 的链接规则,添加一个WebSecurityConfigurerAdapter 类型的bean和使用
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
。当确实想要覆盖应用程序的规则以及
ACTUATOR
的链接规则,使用@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)。