如何替換已棄用的 JWT parser().setSigningKey()
1. 概述
Java JWT(JSON Web Token)庫是一個用於建立、解析和驗證 JWT 令牌的工具。這些令牌可保護 API 和 Web 應用程式的安全,是身分驗證和授權的常見解決方案。
在本教程中,我們將學習如何以更現代的parserBuilder.setSigningKey()
取代該程式庫中已棄用的parser().setSigningKey()
方法。在深入實作之前,我們將討論此變更的原因以及使用 JWT 解析器建構器解析和驗證 JSON Web 令牌的優勢。
2.什麼是簽名密鑰?
簽署金鑰是 JWT 令牌的關鍵元素。 JWT 令牌由三個部分組成:標頭、有效負載和簽名。簽名是透過使用金鑰或公鑰/私鑰對對標頭和負載進行簽署來創建的。當令牌傳送到伺服器時,簽名金鑰用於驗證簽名,確保令牌沒有被竄改。
在 Java JWT 庫中,簽署金鑰在令牌驗證期間提供給解析器。這確保了令牌的完整性並允許伺服器信任其內容。
3.什麼是Jwts
類別?
Jwts
類別是 Java JWT 庫中的核心實用程式類別。它充當使用 JWT 的入口點。此類別為我們提供了創建、解析和驗證 JWT 的各種方法。例如,當我們想要解析 JWT 時,我們首先呼叫Jwts.parserBuilder()
方法,該方法為我們提供了一個建構器,用於建立具有必要配置選項的解析器,例如設定簽章金鑰。
3.1 已棄用的方法概述
現在我們有了一些上下文,讓我們看看我們想要替換的已棄用的parser().setSigningKey()
方法:
JwtParser parser = Jwts.parser().setSigningKey(key);
在這種情況下,我們使用setSigningKey()
來設定用於解析和驗證 JWT 的金鑰。這種方法很簡單,但有局限性,特別是在不變性和線程安全方面,這導致了它最終被棄用。
具體來說,這種配置簽署金鑰的方法在 0.11.0 版本中已被棄用
4. 使用parserBuilder.setSigningKey()
重構程式碼
為了替換已棄用的方法,我們將使用JwtParserBuilder
類別。此外,這是在 0.11.0 版本中引入的,為我們提供了更安全、更靈活的 API 來處理 JWT 令牌。使用簽章金鑰建立JwtParser
的新方法如下所示:
JwtParser parser = Jwts.parserBuilder()
.setSigningKey(key)
.build();
在此範例中, parserBuilder()
允許我們使用簽章金鑰建構解析器,同時提供其他設定選項。最後, build()
方法建立一個不可變的解析器實例,確保它是執行緒安全的,並允許在應用程式的不同部分之間重複使用。
5. 為什麼要改變?
棄用parser().setSigningKey()
是增強 JWT 處理安全性和靈活性的更廣泛措施的一部分。讓我們看看這項變化的一些關鍵原因:
- 不可變性且執行緒安全:新的
parserBuilder.setSigningKey()
方法會產生不可變且執行緒安全的 JWT Parser 實例。這也意味著我們可以跨多個執行緒重複使用相同的解析器,而不必擔心狀態擷取和意外行為。 - 增強的安全性:透過
parserBuilder.setSigningKey()
,我們可以靈活配置特定的所需聲明,也可以設定自訂驗證規則。這有助於我們執行更嚴格的安全規則並輕鬆自訂 JWT 驗證流程。 - 提高可讀性:我們還可以透過使用
parserBuilder.setSigningKey()
使配置明確且更易於理解來提高程式碼的可讀性。
六、結論
在本文中,我們學習如何以parserBuilder.setSigningKey()
取代已棄用的parser().setSigningKey()
方法。我們也探討了棄用背後的原因,並討論了使用更新的 API 建立 JWT 解析器的好處。
與往常一樣,本教程中使用的程式碼可以在 GitHub 上找到。