2017-10-04 228 views
1

我在我的應用程序中使用JWT進行登錄驗證過程。 要生成我使用的令牌:JWT令牌無效簽名

Jwts.builder().setSubject(username).signWith(SignatureAlgorithm.HS512, MacProvider.generateKey()).compact(); 

生成的令牌:

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJlaG91c2VAZGV2ZXJldXgub3JnIn0.5SX-AU-p_RlfC3CZa-YXnQu_YR7RsG2Xfim3LOmlqxjAZrIyZiz0fYZwViHr113ms8TNvngcJcV07U4hK-RBZQ

當我解碼此令牌jwt.io調試器告訴我一個無效的Signature。我無法找到此失敗的原因,因爲我可以在我用於驗證的有效負載中看到用戶名。有人可以指出我的問題嗎?我是否需要更改代碼中的任何內容?

+0

您是否提供了'MacProvider.generateKey()'生成的密鑰來解碼jwt.io中的簽名? – lztachyon

回答

1

MacProvider.generateKey()每次使用它時都會生成一個新的隨機簽名密鑰。您需要生成一次並存儲它。密鑰用於簽署和驗證令牌。

如果你沒有存儲密鑰,你將無法驗證令牌,這正是jwt.io的問題。 您必須提供簽名密鑰。在你的情況下,使用一個可以包含不可表示字符的隨機密鑰(也可以使用密碼短語,但不推薦),將其編碼爲base64。然後在jwt.io中標記支票以驗證令牌

Key key =MacProvider.generateKey(); 
String keyB64 = javax.xml.DataTypeConverter.printBase64Binary(key.getEncoded()); 
+0

這是有道理的。謝謝。 – Mohit224