我使用的是Spring Boot 2.0.0
为了保护我的REST API,我使用Oauth2和JWT,这非常合适。
问题是:
我也使用Springfox Swagger,它应该由BasicAuth保护。因此,如果用户将浏览器指向 /swagger-ui.html ,则会受到质疑 因此我有两个配置文件:
SecurityConfig
@Configuration
@EnableWebSecurity
class SecurityConfig : WebSecurityConfigurerAdapter() {
@Throws(Exception::class)
override fun configure(web: WebSecurity) {
web.ignoring().antMatchers(HttpMethod.OPTIONS, "/**")
}
@Throws(Exception::class)
override fun configure(auth: AuthenticationManagerBuilder) {
auth.inMemoryAuthentication()
//user: "user", password: "Passw0rd!"
.withUser("user")
.password("\$2a\$04\$DDYoNw1VAYt64.zU.NsUpOdvjZ3OVrGXJAyARkraaS00h322eL2iy")
.roles("ADMIN")
}
}
ResourceServerConfig
@Configuration
@EnableResourceServer
class ResourceServerConfig : ResourceServerConfigurerAdapter() {
override fun configure(http: HttpSecurity) {
super.configure(http)
http.httpBasic().and().cors().and().csrf().disable()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.antMatcher("/swagger-ui.html**")
.authorizeRequests().anyRequest().hasRole("ADMIN")
}
}
我认为此处不需要 OAuth2AuthorizationServerConfig 。
显示的配置(当然)不起作用,所以问题是: 是否可以混合BasicAuth和Oauth2?
答案 0 :(得分:1)
好的,我或多或少找到了我的问题的答案:
<强> SecurityConfig 强>
@Configuration
@EnableWebSecurity
class SecurityConfig : WebSecurityConfigurerAdapter() {
@Throws(Exception::class)
override fun configure(auth: AuthenticationManagerBuilder) {
auth.inMemoryAuthentication()
//user: "user", password: "Passw0rd!"
.withUser("user")
.password("...")
.roles("ADMIN")
}
override fun configure(http: HttpSecurity) {
http.csrf()
.and()
.httpBasic()
.and()
.authorizeRequests()
.antMatchers(
"/swagger-ui.html**").hasRole("ADMIN")
.antMatchers(
"/v2/api-docs",
"/swagger-resources/**",
"/configuration/security", "/webjars/**"
).permitAll()
}
}
<强> ResourceServerConfig 强>
@Configuration
@EnableResourceServer
class ResourceServerConfig : ResourceServerConfigurerAdapter() {
override fun configure(http: HttpSecurity) {
http.cors().and()
.antMatcher("/api")
.authorizeRequests().antMatchers("/api/**").authenticated()
}
}
我在 ResourceServerConfig 中使用 antMatcher 来仅使用oauth2保护/ api / **路径。
BasicAuth部分发生在 SecurityConfig 中。 当前解决方案仅将BasicAuth仅应用于 /swagger-ui.html 端点。其他招摇的资源是公开可见的。
有没有人知道如何保护 / v2 / api-docs ?
答案 1 :(得分:0)
这都是关于将安全性配置匹配到不同的应用程序上下文路径。在Run a Spring Boot oAuth2 application as resource server AND serving web content上查看我的答案-希望对您有所帮助。