使用OAuth2和匿名访问的Spring Security

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用OAuth2和匿名访问的Spring Security相关的知识,希望对你有一定的参考价值。

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

答案

我放弃了我的@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

以上是关于使用OAuth2和匿名访问的Spring Security的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security OAuth2 JWT 匿名令牌

使用 OAuth2 保护 REST Web 服务:一般原则

Spring Oauth2 - 自定义异常处理程序

Spring security - 允许匿名访问

Oauth2 初步

利用OAuth2.0来构建一个基于Spring Boot的安全的端到端通信应用