@PostMapping("repo")
@PreAuthorize("hasAuthority('SCOPE_email')")
fun addRepo(
@RequestBody addRepoRequest: AddRepo,
@AuthenticationPrincipal jwt: Jwt
) {
我正在尝试测试一个端点,它需要一个经过验证的okta jwt令牌,并且在执行检查有效/无效电子邮件和作用域的测试时,不知道如何将jwt对象注入端点。
我在过去用oidc将oidc标记填充到mockmvc的安全上下文中,但这在用jwt(注入oidcuser为null)时不起作用:
val idToken = OidcIdToken(
ID_TOKEN, Instant.now(),
Instant.now().plusSeconds(60), claims
)
SecurityContextHolder.getContext().authentication = authenticationToken(idToken)
val authInjector = SecurityContextHolderAwareRequestFilter()
authInjector.afterPropertiesSet()
mvc = MockMvcBuilders.webAppContextSetup(this.context).build()
还尝试使用mock bean来实现这一点,但错误是,在安全上下文中,应该有一个字符串,而不是指向需要模拟的内容:
@MockBean
private lateinit var securityContext: SecurityContext
...
fun testAddRepo() {
`when`(securityContext.authentication)
.thenReturn(getMockJwtToken())
SecurityContextHolder.setContext(securityContext)
我也尝试过这种技术,但是jwt总是空的:如何在spring引导单元测试中模拟jwt身份验证?
有没有人有更好的方法来测试jwt端点?
暂无答案!
目前还没有任何答案,快来回答吧!