获取安全排除的端点的“ invalid_token”和“未授权”

时间:2018-08-15 08:49:56

标签: spring spring-security

我忽略了/users端点,即发送用户注册数据的位置,如下所示:

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers(
            "/users"
    );
}

有趣的是,注册有效。但是,如果我注册一个重复的用户,这会导致违反约束的异常,那么客户端将收到:

{
  "error": "invalid_token",
  "error_description": "Access token expired: eyJhbGciOiJIUzI1N .."
}

有时

{
  "error": "unauthorized",
  "error_description": "Full authentication is required to access this resource"
}

我不明白为什么会这样。我还有OAuth2的其他配置代码:

@Configuration
@EnableResourceServer
public class ResourceServer extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
            .requestMatchers().antMatchers("/**")
            .and()
                .authorizeRequests()
                .anyRequest()
                .access("#oauth2.hasScope('write')");
    }

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.resourceId(resourceIds);
    }

}

但是我不知道这是否与问题有关。

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

而不是忽略端点,而是全部允许它:

@Override
public void configure(HttpSecurity http) throws Exception {
    http
        .requestMatchers().antMatchers("/**")
        .and()
            .authorizeRequests()
            .antMatchers("/users").permitAll()
            .anyRequest().access("#oauth2.hasScope('write')");
}

匹配器按照声明的顺序考虑,因此它将在/users之前检查.anyRequest().access匹配器。