28. 安全
如果 Spring Security在classpath上,那么web 应用默认就被保护。Spring Boot依靠Spring Security的内容协商(content-negotiation)策略来决定是使用httpBasic
还是formLogin
。为了对一个web应用添加方法级的安全,你也可以添加@EnableGlobalMethodSecurity
和你希望的设置。额外的信息可以在Spring Security Reference Guide找到。
默认地UserDetailsService
有一个唯一的(single)用户。该用户名是user
,它的密码时随机的并在应用启动时在INFO级别打印出来,如下所示:
- Using generated security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35
如果你微调(fine-tune)你的日志配置,确保org.springframework.boot.autoconfigure.security
类型是设置到记录INFO级别信息。否则,默认地密码不会被打印。
你可以改变用户名和密码通过提供spring.security.user.name
和spring.security.user.password
。
你在一个web 应用中默认得到的基础特性是:
- 一个
UserDetailsService
(WebFlux 应用中是ReactiveUserDetailsService
)bean with in-memory store and a single user with a generated password (seeSecurityProperties.User
for the properties of the user)。 - 为了整个应用的基于表单登录或者HTTP基本安全(取决于内容类型(including actuator endpoints if actuator is on the classpath)
- 一个为发布认证事件的
DefaultAuthenticationEventPublisher
你可以提供一个不同的AuthenticationEventPublisher
,通过为它添加一个bean。
28.1 MVC 安全机制
默认的安全配置在SecurityAutoConfiguration
和UserDetailsServiceAutoConfiguration
中实现。为了web安全,SecurityAutoConfiguration
导入SpringBootWebSecurityConfiguration
,UserDetailsServiceAutoConfiguration
配置认证,这也和非web应用相关。为了完全关闭默认的web应用安全配置,你可以添加一个类型为WebSecurityConfigurerAdapter
的bean(这么做不会停掉(disable)UserDetailsService
配置或者Actuator的安全机制)。
……
28.2 WebFlux 安全机制
28.3 OAuth2
OAuth2是一个被广泛使用的Spring支持的认证框架。
28.4 客户端
如果你有spring-security-oauth2-client
在你的classpath上,你可以利用一些自动配置来让配置(set up)OAuth2客户端更容易。这个配置充分使用了OAuth2ClientProperties
下的属性。
你可以注册多个OAuth2客户端和提供者在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
……
28.3.2 服务端
28.4 Actuator 安全机制
28.4.1 Cross Site Request Forgery保护