【问题标题】:Spring security: manually bring back default configurationSpring security:手动带回默认配置
【发布时间】:2017-12-28 23:39:40
【问题描述】:

我有一个可以与 OAuth2(作为资源服务器)一起正常工作的 Spring Boot 应用程序。没有自定义 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="Invalid token does not contain resource id (oauth2-resource)"

所以我想我以某种方式错误地覆盖了默认的 OAuth2 配置。怎么带回来?

【问题讨论】:

  • 这是唯一涉及安全的配置。 @EnableResourceServer 在主课上。并且在我添加 Security 类之前一切正常
  • 我有 cloudfoundry-uaa 作为授权服务器。问题发生在仅作为资源服务器的服务器上
  • 您可以从删除安全类开始,看看端点是否再次开始工作:)
  • @LukeBajada 是的,没有安全类,所有端点都在工作。但都受到保护,我需要 /public/** 可以匿名访问

标签: java spring spring-boot spring-security spring-security-oauth2


【解决方案1】:

我找到了答案。在@dur cmets 之后,我需要在资源服务器配置中设置资源ID(如下所示)。我需要将其设置为令牌的aud 字段中传递的资源之一。

@Configuration
class Security extends ResourceServerConfigurerAdapter {

  @Override
  public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.resourceId("my-resource-name");
  }
}

但我不知道为什么它可以在没有任何安全配置的情况下工作,因为 spring 的默认 id 是oauth2-resource。当根本没有配置时,似乎它被忽略了

【讨论】:

    猜你喜欢
    • 2015-08-17
    • 2014-07-04
    • 2016-06-06
    • 2015-11-25
    • 2016-01-02
    • 2017-12-22
    • 2018-11-14
    • 1970-01-01
    • 2020-07-21
    相关资源
    最近更新 更多