tigtools

JWT 產生器

建立並簽署測試用的 JSON Web Token,或檢查 token 的 HMAC 簽章是否符合 secret。簽署作業使用您瀏覽器的 Web Crypto API。

在瀏覽器中執行 免註冊

模式
密鑰只會留在這個瀏覽器分頁中,不會傳送到任何地方。即便如此,請勿將生產環境的簽署密鑰貼到任何網站:任何持有該密鑰的人都能為您的系統建立有效的 token。請在此使用測試密鑰。

alg 由演算法選單設定;typ 預設為 JWT。

例如 sub、iat 和 exp 等宣告。時間為自 1970 年(UTC)以來的秒數。

請輸入密鑰以簽署權杖。

使用方式

  1. 選擇 HS256、HS384 或 HS512。
  2. 編輯 payload claims,然後按一下「設定 iat 與 exp」以加入目前時間和到期時間。
  3. 輸入測試用 secret,或產生隨機的 256 位元 secret。
  4. 複製已簽署的 token。若要檢查 token,請切換到「驗證簽章」,貼上 token 並輸入 secret。

運作方式

JSON Web Token (RFC 7519) 有三個以 Base64URL 編碼的部分:標頭、包含聲明的 payload,以及簽章。使用 HMAC 演算法 HS256、HS384 和 HS512 時,簽章是以共用密鑰對 "header.payload" 計算的 HMAC,使用 SHA-256、SHA-384 或 SHA-512。任何持有密鑰的人都可以建立與驗證權杖。

此工具會將標頭與 payload 序列化為緊湊 JSON、進行編碼,並使用瀏覽器內建的 Web Crypto API crypto.subtle 簽署。標頭中的 alg 欄位永遠符合所選演算法,typ 預設為 JWT,其他標頭欄位(例如 kid)則會保留。「Set iat and exp」會將目前時間寫入 iat(簽發時間),並以選擇的有效期間加入 exp,兩者皆以 1970 年 1 月 1 日 UTC 起的秒數表示。結果與其他 JWT 程式庫一致;例如可完全重現經典的 jwt.io 範例權杖。

密鑰可以是一般文字(其 UTF-8 位元組即為金鑰),或是許多框架使用的 Base64/Base64URL 編碼位元組。隨機密鑰按鈕會以 crypto.getRandomValues 建立 32 個隨機位元組。使用 HS256 時,請至少使用 32 個隨機位元組;人類選擇的短密鑰可從任何權杖離線猜出。

驗證會解碼權杖、檢查其使用 HMAC 演算法,並以 crypto.subtle.verify 重新計算簽章。它也會顯示 exp 或 nbf 是否表示權杖已過期或尚未生效。不支援 RS256、ES256 及其他公開金鑰演算法,且此處驗證不會檢查簽發者、受眾或應用程式可能需要的其他聲明。

範例

在本機測試 API

您的開發伺服器需要以「dev-secret-change-me」簽署的 HS256 權杖。將 sub 設為測試使用者 ID,點擊「Set iat and exp」並選擇 1 小時,輸入密鑰,然後以 Authorization: Bearer 標頭傳送權杖。

檢查哪個 secret 簽署了 token

一組 staging token 被拒絕。請將它貼到「驗證簽章」並嘗試 staging secret:「簽章無效」表示此 token 是以不同的 secret 簽署,或 secret 的格式不同(文字與 Base64)。

重現 jwt.io 範例

使用 header {"alg":"HS256","typ":"JWT"}、payload {"sub":"1234567890","name":"John Doe","iat":1516239022} 和 secret “your-256-bit-secret” 建立的 token 結尾為 SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c,與 jwt.io 上的結果相同。

常見問題

我的 secret 會傳送到你們的伺服器嗎?

不會。簽署與驗證是在您的瀏覽器內透過 Web Crypto API 執行,secret 不會被儲存或傳送到任何地方。我們仍建議只使用測試用 secret,因為真實的簽署 secret 不應輸入到任何網站。

為什麼 secret 正確但簽章無效?

請檢查 secret 格式。有些系統直接使用 secret 的文字,有些則先從 Base64 解碼,因此產生的金鑰位元組不同。也請檢查 token 是否未經修改,且使用相同的演算法。

我可以建立 RS256 或 ES256 token 嗎?

這個工具不支援。它僅支援共用 secret 的 HMAC 演算法 HS256、HS384 和 HS512。

payload 是否經過加密?

不會。已簽署的 JWT 僅經過編碼,任何人都可以解碼並讀取 payload。簽章只能證明它未被修改。請勿將密碼或其他機密資料放在 payload 中。

隱私權

Token 僅在您的瀏覽器內以 Web Crypto API 建立與驗證。header、payload、token 和 secret 不會上傳、儲存或納入分析。