在我的Spring Boot应用程序中,有一些经过认证的控制器,运行模式是"OAuth2资源服务器",所以我的应用程序依赖于某个任意的OAuth2授权服务器(假设它是Keycloak,尽管它应该不影响mock的方式)
所以,问题是:
- 模拟JwtDecoder的正确方法是什么,以便能够传递一些静态字符串作为承载令牌?**
(请记住,它是负责令牌发布的第三方服务器;所以我不能在测试中依赖它。例如,我想模拟它,以便能够脱机运行测试)
- 我希望发生的事情的一个例子:*
1.我模拟JwtDecoder(假设我创建了一些〈token string,UserData〉的Map)
1.我使用Authorization头中的这个静态字符串(Authorization:控制器测试用@SpringBootTest
和@AutoConfigureMockMvc
修饰。
1.我希望用来自被模拟的JwtDecoderMap的UserData的数据填充JwtAuthenticationToken。
- 我已经尝试**创建一个具有所有描述特性的JwtDecoder实现的bean。我看到这个bean被添加到配置中,但是整个测试仍然以
AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
结束。所以我假设JwtDecoder从未被调用(用调试器检查),并且整个测试设置被错误配置,但是我不知道确切地改变什么。
- 我已经尝试**创建一个具有所有描述特性的JwtDecoder实现的bean。我看到这个bean被添加到配置中,但是整个测试仍然以
我错过了什么?
1条答案
按热度按时间mum43rcc1#
对于
MockMvc
(以及React式应用程序中的WebTestClient
),Authorization
头被忽略(不解码、验证、内省或其他)。测试安全上下文将直接设置(
SecurityContextHolder.createEmptyContext().setAuthentication(auth);
)或借助以下任一项进行设置:@WithMockUser
,但这个注解不太适合模拟OAuth2身份)。MockMvc
的后处理器WebTestClients
的增变子更多详细信息,请参阅other answer。