無需上傳, 100% 本機處理, 無需帳戶

操作教學

如何在不外洩的情況下解碼 JWT

JSON Web Token 攜帶著真實資料:權杖簽發給哪個使用者、授予哪些權限範圍、何時過期。把它貼到隨便一個線上解碼器,就等於把這些資料連同往往仍然有效的工作階段,交給一台你無法掌控的伺服器。下面的解碼器完全在你的瀏覽器中執行,因此你可以讀取權杖裡的內容、檢查它是否已過期,並在知道密鑰時驗證 HMAC 簽章,整個過程不會有任何網路請求離開你的分頁。

逐步教學

  1. 開啟 JWT 解碼器,把權杖貼到輸入框。一個 JWT 是由點號連接的三段 Base64Url:標頭、酬載與簽章。帶不帶 Bearer 前綴都可以貼上,工具會以任一形式讀取其結構,並在格式有誤時立即告訴你。
  2. 閱讀解碼後的標頭與酬載。標頭顯示簽章演算法(例如 HS256 或 RS256),以及在存在時顯示密鑰 ID。酬載列出各項聲明:權杖發給誰(sub)、由誰簽發(iss)以及各個時間戳記。工具會把數值型的 iat、nbf、exp 欄位轉換為可讀日期,並標明權杖仍然有效還是已經過期。
    一個解碼後的 JWT,顯示標頭演算法以及帶有可讀簽發日期與過期日期的酬載聲明
  3. 如果權杖使用 HS256 而你持有共享密鑰,就把密鑰貼到驗證欄並點擊 Verify。工具會對標頭與酬載重新計算 HMAC 並與簽章比對,於是你能知道權杖是真實的還是遭到竄改。對於 RS256 或 ES256 權杖,簽章使用的是你沒有的私鑰,所以工具會查看聲明,但不會宣稱自己驗證了簽章。
    填入共享密鑰的 HMAC 驗證欄,以及 HS256 權杖的有效簽章徽章

為什麼絕不該把權杖貼到隨便的網站

JWT 沒有加密。標頭與酬載只是經過 Base64Url 編碼,這表示任何收到權杖的人都能讀到裡面的每一項聲明:電子郵件、使用者 ID、角色、內部旗標。如果這是一個尚未過期的存取權杖,持有它的人就能重放它,在它過期之前冒充你行事。當你把一個有效權杖貼到代管式解碼器時,這一切都會進入那台伺服器的記錄。在自己的機器上、不做任何上傳地解碼權杖,是在不擴大可見範圍的前提下查看它的唯一辦法。你可以在解碼時開啟網路面板,確認流量為零。

簽章能告訴你什麼、不能告訴你什麼

簽章的作用,是阻止有人改動聲明後還能矇混過關。對於 HS256 權杖,簽章與驗證用的是同一個密鑰,所以只要你知道密鑰,就能在這裡完全確認權杖是真實的。對於 RS256 與 ES256 權杖,由私鑰簽章、只有對應的公鑰才能驗證;私鑰從不離開簽發方,因此用戶端工具能讀取聲明,但沒有那個公鑰就無法誠實地證明簽章。在簽章被驗證密鑰的持有者核對之前,請把解碼出的酬載當作簽發方提出的聲明,而不是證據。若要單獨對密鑰做雜湊或比對,本站的雜湊產生器同樣在本機執行。

JWT 結構及每個部分揭示的內容

JWT 是以點分隔的三個 Base64url 編碼段:標頭、承載和簽名。標頭聲明代幣類型(「JWT」)和演算法:HS256(HMAC-SHA-256,共享密鑰)或 RS256(RSA-SHA-256,公/私鑰對)最為常見。承載包含聲明,如 `sub`(主體,通常是使用者 ID)、`iat`(發行時間 Unix 時間戳)、`exp`(到期 Unix 時間戳)、`aud`(目標受眾)以及角色或範圍等自訂應用程式聲明。Base64url 不是加密:它是 Base64 的 URL 安全變體,將 `+` 替換為 `-`,將 `/` 替換為 `_`,並省略填充。持有原始代幣字串的任何人都可以在不使用簽名密鑰的情況下解碼標頭和承載。只有簽名段需要密鑰來驗證。這就是為什麼將有效的正式環境代幣貼到外部線上解碼器是安全風險:如果代幣的 `exp` 仍在未來且服務記錄了輸入,其代表的工作階段可能遭到洩露。

本指南使用的工具

常見問題

我解碼權杖時,它會被送到任何伺服器嗎?

不會。解碼器把權杖拆開,對標頭與酬載做 Base64Url 解碼,並在記憶體中呈現出來。可選的 HMAC 檢查使用瀏覽器內建的 Web Crypto API。沒有任何內容經過網路傳輸,這一點很重要,因為 JWT 往往包含個人資料和一個仍然有效的工作階段。解碼時開啟瀏覽器的網路面板,你會看到沒有任何請求送出。

這個工具能驗證 RS256 或 ES256 簽章嗎?

不能完全驗證,它也不會假裝能。HS256 用同一個共享密鑰來簽章與驗證,所以貼上該密鑰後工具就能在你的瀏覽器裡確認簽章。RS256 與 ES256 用私鑰簽章、用另外的公鑰驗證;工具會讀取並核驗聲明與過期時間,但不會斷言一個它無法核對的簽章。對於這類權杖,請在持有公鑰的服務上驗證。

來源