功能說明
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 簽章。
使用方法
- 以 JSON 物件撰寫酬載,或點選範例。
- 選擇演算法,在輸入框頂端輸入金鑰或貼上 PEM 私鑰。
- 可將 iat 設為現在時間、加入有效期限(exp),或加入金鑰 ID 等額外標頭欄位。
- 從輸出框複製權杖,可貼到 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 完成,金鑰只存在目前頁面的記憶體裡,不會儲存、不會寫進網址列,也不會包含在分享連結中。即便如此,也請勿把正式環境的金鑰貼到你無法掌控的網頁。