使用numbus库更新JWT标记字段

时间:2017-05-01 18:14:50

标签: java jwt jose

我有一个签名的JWT令牌,我需要更新现有字段,让我们称之为userName。我正在使用NIMBUS + JOSE和。我想出了如何解析它并提取声明:

SignedJWT.parse(token)

但解析并不是我唯一需要的东西:我已经更新了字段并重新组合了它的令牌。是否有一种简单的方法或任何类型的惯用解决方案,无需从头开始重新创建令牌。

1 个答案:

答案 0 :(得分:1)

我花了一些时间试图弄清楚如何使用库修改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));