1
我有一个签名JWT令牌,我需要更新现有字段,我们将其称为userName
。我使用NIMBUS + JOSE和。我想出如何分析它,并提取声称:使用numbus库更新JWT令牌字段
SignedJWT.parse(token)
但分析不是我唯一需要的:我有更新的领域和重组了它的记号回来。有没有一种简单的方法或任何类型的惯用解决方案,将从头开始重新创建令牌。
我有一个签名JWT令牌,我需要更新现有字段,我们将其称为userName
。我使用NIMBUS + JOSE和。我想出如何分析它,并提取声称:使用numbus库更新JWT令牌字段
SignedJWT.parse(token)
但分析不是我唯一需要的:我有更新的领域和重组了它的记号回来。有没有一种简单的方法或任何类型的惯用解决方案,将从头开始重新创建令牌。
我花了一些时间试图找出如何使用库来修改JWT令牌。 而我使用了一种快速而肮脏的解决方案:
// Split token into parts (parts are separated with '.'
final String[] tokenParts = token.split("\\.");
// decode payload part
final String decodedPayload =
new String(Base64.getDecoder().decode(tokenParts[1]), "UTF-8");
// enrich payload with additional userName field by adding it to the end of
// JSON. Remove the last character which is '}' and append data as String
final String updatedDecodedPayload =
decodedPayload.substring(0, decodedPayload.length() - 1)
+ ",\"userName\":\"" + "Richard" + "\"}";
// update payload with userId field and encode it back to base64
tokenParts[1] = Base64.getEncoder().encodeToString(
updatedDecodedPayload.getBytes()
);
final String updatedToken = String.join(".", tokenParts));