DevToolPal
繁

JWT 產生與簽章

以 JSON 酬載產生並簽署 JSON Web Token,支援 HS256/384/512,以及使用 PEM 私鑰的 RS、PS、ES 演算法。

本機處理,不會上傳

選項

金鑰格式

酬載(JSON)

0 字元 · 0 B

JWT

0 字元 · 0 B

功能說明

JSON Web Token(JWT,RFC 7519)是一種精簡、URL 安全的字串,以點分成三段:宣告簽章演算法的標頭、包含宣告(claims)的酬載,以及對前兩段的簽章。API 以 JWT 作為 Bearer 權杖,身分提供者以它作為 ID 權杖。

本工具根據 JSON 酬載產生並簽署權杖,支援:

  • HS256、HS384、HS512:使用共享金鑰的 HMAC,金鑰可為文字或 Base64。
  • RS256、RS384、RS512 與 PS256、PS384、PS512:使用 PEM 私鑰的 RSA 簽章。
  • ES256、ES384、ES512:使用 EC 私鑰的 ECDSA 簽章。

使用方法

  1. 以 JSON 物件撰寫酬載,或點選範例。
  2. 選擇演算法,在輸入框頂端輸入金鑰或貼上 PEM 私鑰。
  3. 可將 iat 設為現在時間、加入有效期限(exp),或加入金鑰 ID 等額外標頭欄位。
  4. 從輸出框複製權杖,可貼到 JWT 解碼工具查看。

範例

金鑰為 your-256-bit-secret 時,以 HS256 簽署下列酬載,會得到 jwt.io 上那個經典範例權杖:

{"sub":"1234567890","name":"John Doe","iat":1516239022}

標頭固定寫成 {"alg":"HS256","typ":"JWT"},後面接著你加入的額外欄位;alg 永遠與所選演算法一致。

最佳做法

用 exp 宣告讓權杖短期有效,並設定 iss 和 aud,避免給某個服務的權杖被拿去另一個服務重放。伺服器驗證簽章時,務必明確列出允許的演算法並拒絕 none。HMAC 金鑰應夠長且隨機,至少與雜湊輸出等長(HS256 為 32 位元組)。

常見問題

› 應該選哪種演算法?

選伺服器驗證時使用的那種。HS256 使用共享金鑰,常見於單一系統內部。RS256 和 ES256 以私鑰簽署,任何人都能用公鑰驗證,適合由多個服務檢查的權杖。ES256 的簽章比 RS256 短得多。

› 支援哪些私鑰格式?

支援 PEM 格式的 PKCS#8(BEGIN PRIVATE KEY)、PKCS#1 RSA(BEGIN RSA PRIVATE KEY)和 SEC1 EC(BEGIN EC PRIVATE KEY)。加密的私鑰需先匯出為無密碼版本。ES256、ES384、ES512 分別需要 P-256、P-384、P-521 曲線的金鑰。

› JWT 的酬載是保密的嗎?

不是。標頭和酬載只做了 Base64URL 編碼,拿到權杖的人都能讀取。簽章防止的是竄改而不是讀取。不要把密碼等機密資訊放進 JWT 酬載。

› 我的金鑰或私鑰會被儲存或傳送出去嗎?

不會。簽署在瀏覽器中透過 Web Crypto API 完成,金鑰只存在目前頁面的記憶體裡,不會儲存、不會寫進網址列,也不會包含在分享連結中。即便如此,也請勿把正式環境的金鑰貼到你無法掌控的網頁。