春天禁用@EnableResourceServer

Posted

技术标签:

【中文标题】春天禁用@EnableResourceServer【英文标题】:Spring disable @EnableResourceServer 【发布时间】:2018-01-09 22:49:37 【问题描述】:

我有资源服务器,当它启动时 - 它正在向身份验证服务器(“http://localhost:xxxx/auth/oauth/token_key”)发送请求,并且一切正常并运行。

但是当我测试我的服务时,我根本不需要这个。如何禁用资源服务器,或者我应该模拟某些东西,使其不依赖于身份验证服务器(用于控制器的未来安全测试)?

我的spring boot main:

@SpringBootApplication
@EnableEurekaClient
@EnableResourceServer
public class CalendarApplication 

    public static void main(String[] args) throws Exception 
        SpringApplication.run(CalendarApplication.class, args);
    

application.yml

security:
  basic:
    enabled: false
  oauth2:
    resource:
      jwt:
        keyUri: http://localhost:xxxx/auth/oauth/token_key

测试类注解:

@RunWith(SpringJUnit4ClassRunner.class)
@WebMvcTest(value = TypeController.class, secure = false)
public class TypeControllerTest 

【问题讨论】:

【参考方案1】:

您为什么不使用单独的个人资料 (@Profile("test")) 为您的 @AuthenticationServer 创建单独的 @Configuration?这样,您无需禁用安全性并且可以拥有内存中的令牌。我就是这样处理的。您还可以完全禁用测试的 Spring Security。看看this question。

【讨论】:

您知道仅在应用程序上下文中禁用@EnableResourceServer 的方法吗?无需接触源代码。 我不认为有一个,因为你试图禁用你首先启用的东西。我会为不同环境的应用程序上下文使用不同的配置。最后,您将希望在启用所有功能的情况下测试您的应用。【参考方案2】:

您可以使用@WithMockUser 进行测试

Testing Method Security

【讨论】:

您知道仅在应用程序上下文中禁用@EnableResourceServer 的方法吗?无需接触源代码。【参考方案3】:

我解决此问题的方法是在我用于测试的数据库中创建一个令牌,并确保对我的 API 的请求使用令牌向资源发出请求正在测试中。

确实想要你的令牌在那里,因为它可以作为一个合理的安全检查。如果您希望在没有特定令牌的情况下无法访问此资源,那么这是一个有用的测试。

【讨论】:

但我有两个案例 - 首先是测试案例,我正在使用 json 模式检查有效的 json。在那里我根本不需要安全。在另一种情况下,我想测试安全性,当然需要令牌。 例如,如果我想测试我的存储库,它不会运行应用程序,因为它正在尝试查找 AuthServer.. 这不是正确的行为。

以上是关于春天禁用@EnableResourceServer的主要内容,如果未能解决你的问题,请参考以下文章

Spring security 的 @EnableWebSecurity 与 oauth 的 @EnableResourceServer

使用 @EnableResourceServer 支持 Spring Boot 反应式 (webflux)

@EnableResourceServer 不适用于 spring-webflux

EnableResourceServer 中断 oAuth2 授权服务器

@EnableOAuth2Sso 和 @EnableResourceServer 在同一个应用程序中

Spring OAuth @EnableResourceServer 阻止来自 OAuth 服务器的登录页面