Обновление поля токена 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));
Другие вопросы по тегам