我有一个可以正常使用OAuth2的Spring启动应用程序(作为资源服务器)。没有自定义configure(HttpSecurity http)
方法。仅
spring-boot-starter-security
spring-security-oauth2
spring-security-jwt
被添加到pom。
我需要添加应该不受保护的端点。所以我添加了自定义配置:
@Configuration
public class Security extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers(GET, "/public/**").anonymous()
.anyRequest().authenticated()
}
}
现在/public/**
端点正确地为所有人开放。但是所有其他端点都停止工作,在调试级别我看到了:
p.a.OAuth2AuthenticationProcessingFilter:身份验证请求失败:error =“access_denied”,error_description =“无效令牌不包含资源ID(oauth2-resource)”
所以我想我不知何故错误地覆盖了默认的OAuth2配置。如何把它带回来?
答案 0 :(得分:0)
我找到了答案。在@dur注释之后,我需要在资源服务器配置中设置资源ID(如下所示)。我需要将其设置为令牌aud
字段中传递的资源之一。
@Configuration
class Security extends ResourceServerConfigurerAdapter {
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.resourceId("my-resource-name");
}
}
但我不知道为什么它没有任何安全配置,因为spring的默认id是oauth2-resource
。似乎在没有配置的情况下被忽略了