Обновление поля токена JWT с использованием библиотеки Numbus
У меня есть подписанный токен JWT, и мне нужно обновить существующее поле, давайте назовем его userName
, Я использую NIMBUS + JOSE и. Я разобрался, как его разобрать и извлечь претензии:
SignedJWT.parse(token)
но разбор не единственное, что мне нужно: я обновил поле и собрал его токен обратно. Существует ли простой способ или какое-либо идиоматическое решение, которое будет работать без воссоздания токена с нуля.
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));