有没有一种简单的方法可以将 sub 值添加到 jwt 令牌以进行测试?

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

我有一个接收 Jwt 令牌然后提取子值的方法。我想测试它,为此,我应该模拟一个令牌并设置一个子值。然而,我在某种程度上很难正确地做到这一点。

这是我要测试的方法:

public String getSub(JwtAuthenticationToken principal) {
    Map<String,Object> info = new HashMap<>();
    info.put("sub", principal.getTokenAttributes().get("sub"));
    return info.toString().replaceAll("\\{", "").replaceAll("\\}","").replace("sub=", "");
}

这是我迄今为止创建的测试:

@Test
void testEndpoint() {
    JwtAuthenticationToken principal = Mockito.mock(JwtAuthenticationToken.class);
    Mockito.when(principal.getTokenAttributes()).thenReturn(jwt.getClaims());
    String sub = subExtractionService.getSub(principal);
    String test = "subValue";

    Assertions.assertEquals(test, sub);
}

测试当然不行,因为如上所述,我仍然需要设置 sub 值。这正是我的问题:该怎么做?

java spring-boot unit-testing jwt mocking
1个回答
0
投票

JWT 通常会在需要它对用户进行授权的应用程序外部生成。如果您动态调整 JWT,您应该会遇到相应的数据签名问题。

对于您的单元测试,您似乎嘲笑了这个子值。假设您在应用程序运行时也有它,到目前为止没有问题。

但是您知道 JWT 代表 JSON Web Token 吗?令牌的有效负载是 JSON,因此您应该使用 JSON 解析器来正确获取您的值,而不是使用文本替换 hack。

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