使用OAuth2和匿名访问的Spring Security

问题描述 投票:-1回答:1

我使用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身份验证可选?

spring spring-security oauth-2.0 spring-security-oauth2
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.