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)獲取的公鑰即可,無需擔心洩露問題。
常見問題
閒話 ― 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中採用日益增多。