我忽略了/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);
}
}
但是我不知道这是否与问题有关。
如何解决此问题?
答案 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
匹配器。