本文翻译自 https://docs.spring.io/spring-boot/docs/1.5.7.RELEASE/reference/htmlsingle/
注:个人水平有限,部分翻译可能不到位,欢迎指正!
如果你需细化你的日志配置,确保org.springframework.boot.autoconfigure.security 类被设置到INFO 消息否则默认的密码不会打印出来。
你可以通过提供 security.user.password来改变密码。这个或其他有用的属性通过 SecurityProperties (属性前缀为“security”)来给出。 默认的安全配置在 SecurityAutoConfiguration 和引入她的类中实现(SpringBootWebSecurityConfiguration 实现了web安全而AuthenticationManagerConfiguration 则实现认证配置也可用在非web应用中)。要完全关闭默认的web应用安全配置,你需要增加一个带有 @EnableWebSecurity 的bean(这不会禁用认证管理配置和执行器的安全)。定制安全配置你通常需要额外的属性和 WebSecurityConfigurerAdapter 类型的bean(即增加 基于form的登录)。如果你增加 @EnableWebSecurity 的同时也关闭了执行器安全,除非你增加自定义的WebSecurityConfigurerAdapter否则你需要为整个应用添加默认的登录表单。
如果也需关掉认真管理配置,你可以增加一个AuthenticationManager类的bean,也可以通过在你 @Configuration 类下的一个方法中通过 AuthenticationManagerBuilder 自动注入配置一个全局的AuthenticationManager。这有一些安全应用在Spring Boot 样例中可以让你了解大多数使用场景。 在web应用中可以获得良好支持的基本特性: 一个内存存储的 AuthenticationManager bean 和一个单一用户(看SecurityProperties.User 给用户设置的属性)。忽略常见静态资源位置路径( /css/**, /js/**,/images/**, /webjars/** and **/favicon.ico)(不安全)。所有其他端点的HTTP基本安全。发布到Spring的 ApplicationEventPublisher 中的安全事件(认证成功和失败及访问禁止)。由Spring Security提供的基本低级特性(HSTS,XSS,CSRF,缓存)默认开启。 上述所有的特性都可以开启关闭或修改通过使用额外的属性(security.* )。为了在不改变任何自动配置特点的情况下重写访问规则,你需要增加一个WebSecurityConfigurerAdapter 类型的bean用@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 注解并配置来满足你的需求。通常 WebSecurityConfigurerAdapter 会匹配所有路径,如果你不下那个全部重写Spring Boot自动配置的访问规则,你的适配器必须额外配置你想重写的路径。
同时配置JWT和JWK属性会造成错误。仅需配置他们security.oauth2.resource.jwt.key-uri (或security.oauth2.resource.jwt.key-value) 和security.oauth2.resource.jwk.key-set-uri 中的一个。
如果你使用 security.oauth2.resource.jwt.key-uri 或security.oauth2.resource.jwk.key-set-uri 认证服务器需要在你的应用启动时处于运行状态。这样她会记录未发现密钥的警告,并告诉你如何修复。
OAuth2 资源被一个 security.oauth2.resource.filter-order 规定的拦截器链保护,通常在默认的保护执行器的拦截器之后(所以除非你更改了顺序,否则执行器端点将停留在HTTP基础层面)。在YAML中设置RSA密钥值,使用管道结构符号(“|”)来划分多行且记得键值的缩减(这是YAML语言的特性)例如:
security: oauth2: resource: jwt: keyValue: | -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC... -----END PUBLIC KEY-----你需要增加一个限定符并且检查你的配置是否在你的应用中定义了多个RestTemplate
使用 security.oauth2.client.* 配置作为证书(你同样可用在认证服务器上),但除此之外,她需要知道认证服务器的认证和token URIs。例如: application.yml. security: oauth2: client: clientId: bd1c0a783ccdd1c9b9e4 clientSecret: 1a9030fbca47a5b2c28e92f19050bb77824b5ad1 accessTokenUri: https://github.com/login/oauth/access_token userAuthorizationUri: https://github.com/login/oauth/authorize clientAuthenticationScheme: form 使用上述配置的应用会在你尝试使用 OAuth2RestTemplate.时跳转到GitHub去认证。如果你已经在GitHub上登陆过了,你甚至未发觉她已经被认证了。给定的证书仅在你的应用运行在8080端口有效(在你的GitHub或者其他更合适的平台注册你的客户端app)。 要限制客户端在获取一个访问token的请求范围,你可以设置security.oauth2.client.scope (在YAML中以逗号分隔,或定义成数组)。默认的范围值为空,她会在到达认证服务器时决定默认值为什么,这取决于他获取的客户端认证配置值。security.oauth2.client.client-authentication-scheme 也是一个设置项,默认值 为“header”(但你可能想设置她为“form”, 像GitHub的实例, 你的OAuth2 提供者不喜欢header认证方式). 事实上security.oauth2.client.* 属性被绑定到 AuthorizationCodeResourceDetails 的实例以便所有的属性可以被指定
在非web应用中你仍可创建一个 OAuth2RestOperations ,它仍然会被连接到 security.oauth2.client.* 配置。 这种情况下,如果你使用它,它将是一个“获得token证书的客户端”(这时不需要使用 @EnableOAuth2Client 或 @EnableOAuth2Sso). 要防止基础结构被定义,仅需从你的配置中移除 security.oauth2.client.client-id (或者赋空值)。
application.yml.
security: oauth2: ... resource: userInfoUri: https://api.github.com/user preferTokenInfo: false 由于所有的路径默认被保护,所以没有“home”页展示给未授权的用户,而是邀请他们去登录(通过访问 /login 路径,或者被security.oauth2.sso.login-path指定的路径)。 要自定义访问规则或保护的路径,以便你可以给实例增加“home”页,@EnableOAuth2Sso 可以增加到 WebSecurityConfigurerAdapter 上,注解会造成后者被装饰并且需要必要的代码片段来使/login 路径有效。例如,下面的例子我们简单允许未授权用户可以访问“/”下的home页,但是保持其他默认: @Configuration static class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { @Override public void init(WebSecurity web) { web.ignoring().antMatchers("/"); } @Override protected void configure(HttpSecurity http) throws Exception { http.antMatcher("/**").authorizeRequests().anyRequest().authenticated(); } }