我有受Spring Security和OAuth2保护的Spring REST API,我可以成功检索令牌并访问我的API。我的应用程序自行定义了OAuth2客户端。
现在,我希望用户可以对某些资源进行匿名访问。用例非常简单:我希望我的应用程序无需登录即可使用-但是如果他们登录了,我希望可以访问该主体。
到目前为止,这是我的WebSecurityConfigurerAdapter
:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/api1").anonymous().and()
.authorizeRequests().antMatchers("/ap2**").permitAll();
}
一旦我添加了第二个antMatcher / anonymous,它就无法工作,并且也不能真正表达我的意图-例如我不会对api1
GET进行匿名访问,但会在POST上进行身份验证(使用@PreAuthorize
很容易)。
如何使OAuth2身份验证为可选?
答案 0 :(得分:0)
我放下@EnableWebSecurity
并使用ResourceServerConfigurerAdapter
,如下所示:
@Configuration
@EnableResourceServer
protected static class ResourceServer extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/api/api1", "/api/api2").permitAll()
.and().authorizeRequests()
.anyRequest().authenticated();
}
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.resourceId("my-resource-id");
}
}
/api/api1
现在可以通过或不通过身份验证来调用。