ToolAct工具行動

JWT 生成器

建立 JSON Web Token,自訂 Header 和 Payload

HEADERJWT 頭部配置
SECRET簽名密鑰
PAYLOADJWT 載荷配置
快速加入:
生成的 JWT Token
點選上方按鈕生成 JWT Token

什麼是 JWT?

JWT 產生器用於根據 Header、Payload 和簽章設定建立 JSON Web Token。JWT 由三個 Base64URL 編碼部分組成,常用於在服務之間傳遞使用者 ID、角色、過期時間、簽發方、受眾等 claims。這個工具適合 API 測試、本地開發、教學、除錯和快速產生範例令牌。但產生出的 token 是否可信,取決於金鑰管理、演算法選擇、過期時間和伺服器端驗證是否正確。不要把真實金鑰貼到公開範例裡,弱演算法或過長有效期都有風險,敏感個人或業務資料也不應直接放進未加密的 Payload。

使用方式

JWT 產生流程

  1. 選擇簽章演算法(預設為 HS256)
  2. 輸入或點選「產生」以建立簽章密鑰
  3. 編輯 Payload JSON,可使用快速新增按鈕加入標準聲明
  4. 設定簽發時間(iat)與過期時間(exp)
  5. 點選「產生 JWT Token」按鈕
  6. 複製產生的 Token 用於測試或開發

Token 安全性

  • HMAC 演算法請使用高強度密鑰,RSA/ECDSA 演算法請妥善保管私鑰。
  • 請設定合理的 exp、iat、issuer 和 audience 等聲明;語法正確的 JWT 仍可能有安全風險或被服務端拒絕。

使用場景

為本地服務建立短期測試 Token選擇 HS256、HS384 或 HS512,設定共享密鑰(依 RFC 7518 建議至少 32 位元組),調整過期預設為 1 小時 / 24 小時 / 7 天 / 30 天,產生完整的 JWT 用於開發 API 或中介層測試。Header、Payload、簽名和最終 Token 分別顯示,方便按需複製各部分。HMAC 金鑰不會離開瀏覽器分頁。
為認證流程建模各種 Claims 組合Payload 編輯器和快速 Claims 按鈕讓你輕鬆加入 sub、iss、aud、jti、iat 和 exp 等值,不必記住 Unix 時間戳。日期輸入與 iat 和 exp 聯動,適合重現時鐘偏移、nbf 視窗和重新整理 Token 輪轉流程等邊界情況。
不依賴後端產生獨立的示範 Token對於文件、前端原型或只需要 HMAC 簽名範例 Token 的 QA 腳本,本工具可以建立隨機英數密鑰,透過 Web Crypto 在本機完成簽名。它專注於對稱演算法而非私鑰正式簽名——簽名密鑰留在本地分頁中,永遠不會到達網路端點。
重現 alg=none 與未簽章 token 行為將演算法下拉切換到 none 即可產生未簽章的 JWT,用於明確接受未簽章 token 的客戶端除錯。標頭會分別顯示 alg 與 typ,方便在把 token 送到真實端點前確認下游函式庫如何處理缺失簽章或非預期演算法。
將 Header 和 Payload 匯出為獨立 JSON僅複製 Header 或 Payload 到 curl 請求、Postman 環境變數或測試資料中。分開保留這些部分可避免每次調整單一 Claim 時都要重新簽發 Token,在快速迭代 scope、role 或 tenant 欄位時特別方便。

技術原理

JWT 產生與解析互為逆向:解析負責拆開三段,產生則負責組裝。核心是計算簽章段。 組裝流程:1) 建構 Header JSON,例如 {"alg":"HS256","typ":"JWT"};2) 建構包含標準宣告與自訂宣告的 Payload JSON;3) 分別對 Header 與 Payload 做 Base64URL 編碼,得到 h_b64 與 p_b64;4) 用「.」串接 h_b64 與 p_b64,得到 input = h_b64 + '.' + p_b64;5) 依 alg 計算簽章:HMAC-SHA256/384/512(secret, input);6) 對簽章結果再做 Base64URL 編碼;7) 最終 token = input + '.' + sig_b64。 HMAC-SHA256 簽章:以 secret 作為金鑰(建議 ≥ 32 位元組)對 input 執行 HMAC。HMAC 內部執行兩輪 SHA-256:先從 secret 衍生 ipad/opad,再計算 SHA256(secret XOR ipad || msg) XOR opad。 金鑰強度:secret 長度直接決定安全性。RFC 7518 要求 HS256 金鑰 ≥ 256 位元(32 位元組)。生產環境務必使用密碼學安全的亂數來源(例如 crypto.randomBytes),不要使用「secret」「password」「123456」之類的字串。 常見陷阱:1) alg 替換攻擊:伺服器必須嚴格驗證 alg,不能從 token 標頭讀取 alg 後再分派到對應演算法;2) 弱金鑰:過短的 secret 容易被暴力破解;3) Payload 竄改:HMAC 保證完整性,攻擊者改動 payload 後伺服器驗證會失敗;4) Token 外洩:JWT 不可撤銷,一旦外洩只能等其過期。 本工具範圍:僅產生 HS256/HS384/HS512。RS256(RSA)、ES256(ECDSA)等非對稱演算法需要發行方持有私鑰,由後端簽章服務或專用 SDK 完成,本頁不負責產生。

  • HMAC-SHA256 簽名核心:HMAC(secret, header_b64 + '.' + payload_b64),輸出 256 位元簽名並進行 Base64URL 編碼。
  • HS256 金鑰長度必須 >= 32 位元組(256 位元);建議使用 crypto.getRandomValues 或 crypto.randomBytes 產生——短金鑰容易遭受字典攻擊。
  • 本工具僅產生 HMAC 系列簽章(HS256/HS384/HS512)。RS256、ES256 等非對稱演算法需要發行方持有私鑰,不在本工具產生範圍內——如需此類 token,請改用後端簽章服務或專用 SDK。
  • iat/exp/nbf 都是 Unix 時間戳(秒,非毫秒);伺服器通常要求 exp > now()、nbf <= now()、iat <= now()。
  • alg=none 攻擊:在伺服器端維護允許的演算法白名單(例如 ['HS256']);切勿從 token header 動態選擇演算法。許多 JWT 函式庫在歷史上預設允許 alg=none——這是已知漏洞。
  • JWT 一旦簽發就無法撤銷——唯一的補救是等待 exp。若要主動撤銷,需維護 jti 黑名單或使用短期存取 token 搭配重新整理 token。

範例

基本 HS256 範例

Header:  {"alg":"HS256","typ":"JWT"}
Payload: {"sub":"user-123","name":"Alice","role":"admin","iat":1705312800,"exp":1705399200}
Secret:  my-super-secret-key-32-bytes-long

Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyLTEyMyIsIm5hbWUiOiJBbGljZSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTcwNTMxMjgwMCwiZXhwIjoxNzA1Mzk5MjAwfQ.7Hk2L9oP3qR1mN4vK8xJ2wE5yT6sB0fA9cZ1dG3hI4U

透過 iat 與 exp 自訂有效期

Header:  {"alg":"HS256","typ":"JWT"}
Payload: {"iss":"https://auth.example.com","sub":"user-456","aud":"api.example.com","iat":1705312800,"exp":1705316400}
Secret:  another-strong-secret-32-bytes-long

本工具會先將 Header 與 Payload 做 Base64URL 編碼,以「.」串接,再用共用 secret 執行 HMAC-SHA256,最終輸出三段式 Token,可直接貼到 Authorization 標頭。

自訂 Claims

Header: {"alg":"HS256","typ":"JWT"}
Payload: {
  "sub": "user-789",
  "name": "Bob",
  "role": "editor",
  "tenant": "acme-corp",
  "permissions": ["read:docs", "write:docs"],
  "scope": "docs.read docs.write",
  "iat": 1705312800,
  "exp": 1705399200,
  "jti": "550e8400-e29b-41d4-a716-446655440000"
}

常見問題

JWT 是在本機產生的嗎?

是。標頭、負載與簽章都在您的瀏覽器中透過 Web Crypto API 計算。簽章用的密鑰或私鑰從不離開頁面。請把產生的 token 本身視為可能被記錄或外洩的資料,特別是當您把它貼到實際服務時。

支援哪些簽章演算法?

本工具產生 HS256/HS384/HS512(以共用密鑰為基礎的 HMAC)。RS256/RS384/RS512(RSA)與 ES256/ES384/ES512(ECDSA)等非對稱演算法本工具暫不產生,如需此類簽章請使用後端簽章服務或專用 SDK。生產環境請避免 alg=none:合規的驗證方都會拒絕未簽章的 token。

負載中該放什麼?

標準聲明(claim)如 sub、iss、aud、exp、iat、nbf,加上服務需要的自訂聲明。負載要保持精簡——JWT 會在標頭中傳遞,每次請求都會增加流量。切勿在負載中放入密碼、完整信用卡號或其他機密;負載只是 Base64URL 編碼,並未加密。

如何設定到期時間?

把 exp 設為 token 應停止有效的 Unix 時間戳(單位是秒,不是毫秒)。沒有 exp 的 token 在規範上是合法的,但大多數正式服務都會要求一定要有。常見值為存取 token 5–60 分鐘、刷新 token 7–30 天。

為什麼產生的 JWT 驗證失敗?

常見原因:標頭中的 alg 與驗證端期待的不一致;密鑰或金鑰不同;負載聲明(iss、aud)與伺服器設定不符;簽發端與驗證端的時鐘偏差超過容許值(通常 ±60 秒);手動編輯破壞了 Base64URL 編碼(請勿插入換行)。

我的密鑰或私鑰會被傳到伺服器嗎?

不會。簽章完全在瀏覽器中透過 Web Crypto 進行。話雖如此,仍切勿把正式環境的簽章金鑰貼進任何網頁工具——請先用非正式金鑰測試,再到您的實際後端做簽章。

我該用 HS256 還是 RS256?

HS256 需要雙方共享同一個密鑰,因此只適合簽發與驗證都由同一個服務完成的情境。RS256(或 ES256)讓簽發端保留私鑰、所有消費端都用公鑰驗證——這是 OAuth/OIDC 與任何多服務架構的正確選擇。 本工具僅產生 HS 系列 token;如需 RS256/ES256,請使用後端簽章服務或專用 SDK。