28. 安全

    如果 Spring Security在classpath上,那么web 应用默认就被保护。Spring Boot依靠Spring Security的内容协商(content-negotiation)策略来决定是使用httpBasic还是formLogin。为了对一个web应用添加方法级的安全,你也可以添加@EnableGlobalMethodSecurity和你希望的设置。额外的信息可以在Spring Security Reference Guide找到。

    默认地UserDetailsService有一个唯一的(single)用户。该用户名是user,它的密码时随机的并在应用启动时在INFO级别打印出来,如下所示:

    1. Using generated security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35

    如果你微调(fine-tune)你的日志配置,确保org.springframework.boot.autoconfigure.security类型是设置到记录INFO级别信息。否则,默认地密码不会被打印。

    你可以改变用户名和密码通过提供spring.security.user.namespring.security.user.password

    你在一个web 应用中默认得到的基础特性是:

    • 一个UserDetailsService(WebFlux 应用中是ReactiveUserDetailsService)bean with in-memory store and a single user with a generated password (see SecurityProperties.User for the properties of the user)。
    • 为了整个应用的基于表单登录或者HTTP基本安全(取决于内容类型(including actuator endpoints if actuator is on the classpath)
    • 一个为发布认证事件的DefaultAuthenticationEventPublisher

    你可以提供一个不同的AuthenticationEventPublisher,通过为它添加一个bean。

    28.1 MVC 安全机制

    默认的安全配置在SecurityAutoConfigurationUserDetailsServiceAutoConfiguration中实现。为了web安全,SecurityAutoConfiguration导入SpringBootWebSecurityConfigurationUserDetailsServiceAutoConfiguration配置认证,这也和非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前缀下,如下所示:

    1. spring.security.oauth2.client.registration.my-client-1.client-id=abcd
    2. spring.security.oauth2.client.registration.my-client-1.client-secret=password
    3. spring.security.oauth2.client.registration.my-client-1.client-name=Client for user scope
    4. spring.security.oauth2.client.registration.my-client-1.provider=my-oauth-provider
    5. spring.security.oauth2.client.registration.my-client-1.scope=user
    6. spring.security.oauth2.client.registration.my-client-1.redirect-uri-template=http://my-redirect-uri.com
    7. spring.security.oauth2.client.registration.my-client-1.client-authentication-method=basic
    8. spring.security.oauth2.client.registration.my-client-1.authorization-grant-type=authorization_code
    9.  
    10. spring.security.oauth2.client.registration.my-client-2.client-id=abcd
    11. spring.security.oauth2.client.registration.my-client-2.client-secret=password
    12. spring.security.oauth2.client.registration.my-client-2.client-name=Client for email scope
    13. spring.security.oauth2.client.registration.my-client-2.provider=my-oauth-provider
    14. spring.security.oauth2.client.registration.my-client-2.scope=email
    15. spring.security.oauth2.client.registration.my-client-2.redirect-uri-template=http://my-redirect-uri.com
    16. spring.security.oauth2.client.registration.my-client-2.client-authentication-method=basic
    17. spring.security.oauth2.client.registration.my-client-2.authorization-grant-type=authorization_code
    18.  
    19. spring.security.oauth2.client.provider.my-oauth-provider.authorization-uri=http://my-auth-server/oauth/authorize
    20. spring.security.oauth2.client.provider.my-oauth-provider.token-uri=http://my-auth-server/oauth/token
    21. spring.security.oauth2.client.provider.my-oauth-provider.user-info-uri=http://my-auth-server/userinfo
    22. spring.security.oauth2.client.provider.my-oauth-provider.jwk-set-uri=http://my-auth-server/token_keys
    23. 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保护