2017-05-01 55 views
1

我有一個簽名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));