2017-05-01 6 views
1

Signed JWTトークンがあり、既存のフィールドを更新する必要があります。userNameとしましょう。私はNIMBUS + JOSEとを使用しています。 numbusライブラリを使用してJWTトークンフィールドを更新します。

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)); 
関連する問題