Java jjwt 为 JWT 创建无效 JSON

标签 java jwt jjwt

我一定错过了什么。我正在使用 JJWT 库来创建 JWT。根据声明中的数据集,从库中创建的 JWT 不一致。我的代码:

Date now = new Date();
Date expiration = new Date(now.getTime() + TimeUnit.MINUTES.toMillis(30));

Claims claims = Jwts.claims();

JSONObject jsonObject = new JSONObject();
jsonObject.put("serviceName1", "serviceStatus1");
jsonObject.put("serviceName2", "serviceStatus2");
claims.put("services",jsonObject);

claims.setSubject("225544");
claims.setExpiration(expiration);
claims.setId(UUID.randomUUID().toString());
claims.setIssuedAt(now);

return Jwts.builder()
    .setClaims(claims)
    .signWith(SignatureAlgorithm.HS256, Base64.encodeBase64(secret.getBytes()))
    .compact();

此代码创建 JWT 并对其进行正确签名。但是,当有效负载被解码时,有效负载值并不总是有效的 JSON。大多数情况下,它缺少结束 } 导致任何解析失败。 如果 Subject 是 8 个字符,则效果很好。如果长度为 7 或 6 个字符,则该 JSON 无效。或者,如果我在声明中添加其他标签,有时会起作用,有时则不起作用。难道我做错了什么?

我也尝试过使用 Auth0 java-JWT 库并得到类似的结果,有效负载并不总是有效的 JSON。

最佳答案

请代替 JSONObject尝试Map<String,String>

关于Java jjwt 为 JWT 创建无效 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42496388/

相关文章:

ruby-on-rails - rails : Microservice architecture with dedicated authorization service and app services using Knock (JWT)

java - 使用 JJWT 从 Xero 解析 RS256 JWT

java - 使用 SimpleDateFormat 时出现 ParseException

java - mongo 中的所有操作符均使用 Spring

Java 2D "tank"游戏 : Shooting 'missile' from rotated sprite doesn't work

c# - JWT 访问 token 与刷新 token (创建)

java - 测试复杂的数据场景

c# - 在 DocuSign 模板上预填充选项卡

java - [JWT][JJWT] 函数compact() 非常慢

java - 如何使用 mscapi.RSAPrivateKey 进行 JWT 签名?