JWT簽名驗證工具(RS256/ES256,公鑰驗證)

一款開發者工具,可使用SPKI格式的公鑰(PEM)在瀏覽器中即時驗證以RS256或ES256簽名的JWT(JSON Web Token)。同時顯示解碼後的Header/Payload以及過期時間檢查結果。所有輸入內容僅在瀏覽器內處理,不會發送到伺服器。

支援的簽名演算法一覽

演算法 金鑰型別 雜湊函式 說明
RS256 RSA(RSASSA-PKCS1-v1_5) SHA-256 基於RSA公鑰密碼體制的簽名方式,是Google、Auth0、Okta等主流OAuth 2.0/OpenID Connect提供商為ID令牌採用的標準預設演算法。
ES256 ECDSA(P-256橢圓曲線) SHA-256 基於橢圓曲線密碼學的簽名方式,可用比RSA更短的金鑰長度和簽名長度實現同等安全性,越來越多地應用於移動應用和物聯網裝置。

使用提示

  • 輸入的公鑰必須是PEM格式(SPKI,以「-----BEGIN PUBLIC KEY-----」開頭)。直接貼上私鑰檔案或證書(.crt)無法完成驗證。
  • 系統會根據JWT Header中alg欄位的值(RS256或ES256)自動切換所使用的驗證演算法,無需手動選擇。
  • 驗證簽名的同時也會檢查Payload中的exp宣告,若已過期會顯示警告。即使簽名正確,過期的令牌通常也應被拒絕。
  • 本工具僅支援RS256和ES256。若需確認HS256等共享金鑰方式簽名的JWT,可使用姊妹工具JWT編碼器用相同的共享金鑰重新簽名並比對結果。
  • 用於驗證的公鑰並非機密資訊,直接貼上從身份提供商公開端點(如JWKS)獲取的公鑰即可,無需擔心洩露問題。

常見問題

僅支援RS256和ES256的驗證。HS256、HS384、HS512屬於共享金鑰方式,需要發籤名方和驗證方共用同一金鑰,因此無法用只輸入公鑰的本工具驗證。若需確認HS256簽名,可使用姊妹工具JWT編碼器用相同金鑰重新簽名並比對結果。

身份提供商(Google、Auth0、Okta等)通常通過名為JWKS(JSON Web Key Set)的公開端點發布公鑰。可以使用JWKS轉PEM的轉換工具,或直接使用對應服務文件中提供的公鑰。

常見原因包括:①所輸入的公鑰與簽發該JWT的私鑰不成對;②JWT的Header、Payload或Signature在傳輸過程中被篡改或損壞;③複製貼上時丟失了字元。建議從來源重新準確複製JWT字串和公鑰。

目前僅支援RS256和ES256。RS384/RS512、ES384/ES512等使用更長雜湊函式的變體,屬於後續考慮擴充套件支援的候選方向。

是的,簽名的有效性與exp是否過期是分別判斷並各自顯示的。即使簽名正確,過期的令牌在實際系統中通常也應被拒絕,請務必同時留意頁面上顯示的有效期警告。
ツールくん

閒話 ― HMAC與公鑰簽名,區別在哪裡

JWT的簽名方式大致分為共享金鑰方式(HMAC,如HS256)和公鑰方式(RSA/ECDSA,如RS256、ES256)兩大類。共享金鑰方式要求籤名方與驗證方持有相同的秘密字串,而公鑰方式中只有簽名方持有私鑰,任何人都可以用公開的公鑰進行驗證。這一差異直接決定了API設計中的角色分工:姊妹工具JWT編碼器(HS256)適合「簽發者與驗證者同處一臺伺服器」的場景,而本工具所處理的RS256、ES256則更適合「簽發者與驗證者分屬不同組織或不同伺服器」的場景。

實際上,Google的OAuth 2.0、OpenID Connect、Auth0、Okta等主流身份提供商簽發的ID令牌幾乎無一例外地採用RS256簽名(部分也可選擇ES256)。這是因為只有身份提供商一方持有私鑰進行簽名,而數量龐大的客戶端應用(驗證方)只需使用公鑰即可完成驗證,無需向每個客戶端分發金鑰,從而將金鑰洩露的風險集中在簽名方這一個點上。

RS256與ES256都使用SHA-256進行雜湊計算,但底層的密碼演算法不同。RS256採用RSA密碼體制(通常為2048位或更長的金鑰),簽名長度往往較大,但勝在實現成熟、支援的庫眾多。ES256採用橢圓曲線密碼學(P-256),能以遠比RSA更短的金鑰和簽名長度實現同等的安全強度,因此在移動端和對負載大小敏感的API中採用日益增多。