JWT 編碼解碼

貼上權杖即可看頭部與載荷,也能用自己的載荷簽發一枚 —— 沒有按鈕,也不上傳。

解碼時可選(填了才驗籤),編碼簽發時必填。

怎麼用

  1. 貼上權杖:頭部與載荷立刻出現,不用點按鈕。輸入框始終保留你貼上的原樣,工具從不改寫它。
  2. 在輸入框下方的金鑰框裡填上金鑰,即可校驗簽章。留空只是意味著「未驗證」,宣告照樣照原樣讀出來。
  3. 切到「編碼」,把宣告寫成 JSON,選 HS256/384/512 並填金鑰,複製生成的權杖即可。切換模式不會清空已輸入的內容。
  4. 標準的 exp / iat / nbf 會按你的語言與時區寫成一句人話,並標出「已過期」「尚未生效」。

示例

權杖

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1LTg4NDgiLCJuYW1lIjoi5byg5LyfIiwicm9sZSI6InJldmlld2VyIiwiaXNzIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jbiIsImlhdCI6MTc2NzIyNTYwMCwiZXhwIjoxNzk4NzYxNjAwfQ.uWk-id8qypfOapVGLDN-1dPY01oAUSFxUnDWM48vrP0

頭部與載荷

頭部
{
  "alg": "HS256",
  "typ": "JWT"
}

載荷
{
  "sub": "u-8848",
  "name": "張偉",
  "role": "reviewer",
  "iss": "https://api.example.cn",
  "iat": 1767225600,
  "exp": 1798761600
}

這枚權杖的金鑰是「測試用金鑰」:填進金鑰框後狀態行會變成「簽章有效」。切到「編碼」點「填入示例」會得到同樣的載荷 —— 同樣的金鑰會逐字元還原上面這枚權杖。

口徑、侷限與已知問題

  • 只支援 HS256 / HS384 / HS512 的簽發與驗籤。RS*、ES*、PS* 權杖照常解碼展示,但絕不驗籤 —— 那需要公鑰,狀態行會直接說明不支援,而不是猜一個結論。
  • 無簽章權杖(alg: none)會被解碼並明確標註,但本工具**不簽發**:編碼時不填金鑰會報錯,而不是生成無簽章權杖。
  • 編碼時頭部由工具生成(`{"alg": …,"typ": "JWT"}`),不還原 kid / jku / x5c / cty 等頭部欄位 —— 這裡籤的是宣告,不是證書鏈。
  • 載荷 JSON 在簽章前會被重新緊湊序列化,縮排與註解不會進權杖。鍵順序遵循 JavaScript 物件語義:重複鍵只留最後一個,純數字形狀的鍵會被提前。
  • 超大整數會丟精度 —— `12345678901234567890` 讀回來是舍入過的,這是 JavaScript 數字的行為。工具不靜默修正;在意位數時請用字串。
  • 面板裡的 JSON 是為了人讀而縮排的,簽章覆蓋的始終是權杖裡那兩段原文,中間不做任何重新編碼:在這裡驗過的權杖,在你自己的程式碼裡同樣驗得過。
  • base64url 嚴格:`+` / `/` / `=` 一律報錯而不是悄悄接受;解出的位元組不是合法 UTF-8 會報錯,而不是取代成亂碼字元。貼上時帶入的空白會被忽略 —— 權杖裡本來就不可能有空白。
  • 加密的 JWE(五段式)不解密,但會告訴你粘進來的是 JWE。
  • 上限 10,000 字元。不上傳、不儲存、不寫進 URL、不提供帶貨分享;分享按鈕只分享本頁地址,不攜帶權杖與金鑰。

讀完宣告之後,通常下一步是這些。