/.well-known/openid-configuration URI 对于@WebMvcTest 来说不是绝对的

问题描述 投票:0回答:1

在 Spring Boot 3.2.2 应用程序中,我有一个控制器,它将查看请求中的 Oauth2 令牌,并根据它找到的内容表现出不同的行为。令牌由 Auth0 / Okta 提供。

它按预期工作,但我想为我的控制器编写一个测试:

@WebMvcTest(MembersController::class)
class MembersControllerTest(@Autowired val mockMvc: MockMvc) {
    
    @Test
    fun `should return 403 when name in token is unknown`() {
        val oauth2User = DefaultOAuth2User(
            setOf(),  // Authorities
            mapOf("sub" to "123", "name" to "someUnknownName", "email" to "[email protected]"),
            "sub"
        )

        mockMvc.post("/api/v1/members") {
            with(oauth2Login().oauth2User(oauth2User))
        }
        .andExpect {
            status { isUnauthorized() }
        }
    }

} 

当我运行测试时,出现此错误

错误 org.springframework.boot.SpringApplication -- 应用程序运行 失败 java.lang.IllegalArgumentException:URI 不是绝对的

在调试中,我看到有问题的 URL 是

/.well-known/openid-configuration
.

在堆栈跟踪中,我看到它与

okta
启动器

有关
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:781)
    at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:422)
    at com.okta.spring.boot.oauth.env.OktaOAuth2PropertiesMappingEnvironmentPostProcessor.postProcessEnvironment(OktaOAuth2PropertiesMappingEnvironmentPostProcessor.java:122)
    at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEnvironmentPreparedEvent(EnvironmentPostProcessorApplicationListener.java:109)
    at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEvent(EnvironmentPostProcessorApplicationListener.java:94)

我没想到会发生这种事

@WebMvcTest
..

有没有办法解决这个问题并使用

@WebMvcTest
?或者我是否需要使用
@SpringBootTest
在更高级别进行测试并使用真实令牌发送真实请求?

kotlin spring-security okta spring-boot-test
1个回答
0
投票

在具有 JWT 解码器的 OAuth2 资源服务器

@WebMvcTest
中,您应该
@MockBean JwtDecoder jwtDecoder;
并使用:

  • SecurityMockMvcRequestPostProcessors.jwt()
    来自
    spring-security-test
  • @WithJwt
    来自
    spring-addons-oauth2-test

免责声明:两者(我自己)都是同一作者,并且与涵盖该主题的这篇 Baeldung 文章相同。

© www.soinside.com 2019 - 2024. All rights reserved.