JWT 解碼

在瀏覽器裡解碼 JWT、核對簽章,或簽一枚測試用權杖。支援 HMAC、RSA 和 ECDSA。權杖不會上傳。只有點了用 JWKS 驗簽,瀏覽器才會去取公鑰。

權杖

標頭 承載 簽章

JWKS 網址

用 JWKS 驗簽時,瀏覽器只去這個網址取公鑰,權杖仍留在本頁。對方必須允許瀏覽器存取。

安全檢查

    簽章

    看權杖、驗簽,或簽一枚測試權杖

    JWT 是三段 Base64url:標頭、承載、簽章。標頭和承載是 JSON,沒有加密,拿到權杖的人都能讀。簽章用來說明承載沒被改過,前提是你有 HMAC 金鑰或公鑰。這一頁在瀏覽器裡解碼、驗簽和產生。它會標出 alg 為 none、缺少或已到點的 exp、把時間寫成毫秒,以及短於 32 位元組的 HMAC 金鑰。權杖不上傳。雜湊頁上的校驗不是 JWT 簽章。exp 是以秒計的 Unix 時間,換時區到 時間戳 頁。

    怎麼用

    1. 權杖在左邊。右邊的標頭和承載是兩個標籤。勾著輸入時立即更新時,兩個框都會填上。承載下面的時間是這台電腦的本地時間。沒有寬限:exp 等於或早於現在,就標成已過期。
    2. 顯示範例會放入一份 HS256 權杖,承載是 {"sub":"user-1"},HMAC 金鑰是 secret。金鑰是 Base64 不勾。點驗簽會說簽章一致。安全檢查會說金鑰只有 6 位元組,而且沒有 exp。範例故意用短金鑰。
    3. 驗簽看的是權杖框,不是標頭或承載裡還沒產生的修改。HS256、HS384、HS512 用 HMAC 金鑰。RS、PS、ES 用演算法下面的金鑰對:公鑰驗簽,私鑰產生。點產生金鑰會填上這兩把。產生 JWT 用這兩個框重簽。演算法選單優先於標頭裡寫的 alg。
    4. 過期預設是保留聲明,產生 JWT 不會改 iat 和 exp。選 1 小時再產生,會按現在的秒數寫上這兩項。範本裡的使用者會填 sub 1234567890、name John Doe、email [email protected]。存取會填 sub user-1 和 scope read。
    5. 權杖下面的複製只複製權杖。標頭或承載上的複製只複製那一框。用 JWKS 驗簽會讓這個瀏覽器去 JWKS 網址取公鑰,不送出權杖。全部清除會清掉權杖、兩個 JSON 框、金鑰、鑰匙和網址。

    核對到哪一步

    HS256、HS384、HS512 用金鑰。短於 32 位元組也能簽,安全檢查會警告。只有金鑰本身是 Base64 時才勾金鑰是 Base64。RS256、RS384、RS512、PS256、PS384、PS512、ES256、ES384、ES512 用 PEM 或 JWK。公鑰用來驗簽。PKCS#8 私鑰用來產生。RSA 私鑰裡帶著公鑰,也可以拿來驗簽。可以貼 SPKI(BEGIN PUBLIC KEY)、PKCS#8(BEGIN PRIVATE KEY)或 PKCS#1 的 RSA。憑證會被拒絕。寫著 BEGIN EC PRIVATE KEY 的 EC 鑰匙也會被拒絕,請匯出成 PKCS#8。alg 為 none 不會當成有效。驗簽以標頭裡的 alg 為準。HMAC 金鑰不會拿去驗 RSA。exp、nbf、iat 都是秒。十三位數字只提示,不換算。JWKS 要是一組鑰匙,或單獨一把 JWK。有多把卻沒有 kid 會報錯。標頭或承載若是陣列,產生 JWT 會停住。

    什麼時候用

    • 看手上這份權杖的 sub 和 exp。
    • 給自己設了金鑰的本機服務簽一個 HS256。
    • 用公鑰 PEM,或用允許瀏覽器存取的 JWKS 網址,核對 RS256。
    • 在把測試金鑰寫進設定之前,先看到它太短。

    常見問題

    承載有加密嗎?

    沒有。那只是 Base64url。密碼、身分證字號、卡號不要放進去。

    驗簽失敗先看什麼?

    權杖要有兩個點,兩段都是 JSON。標頭的 alg 得是這一頁認識的。HS 要用簽發時的同一把金鑰,金鑰是 Base64 的勾選也要和金鑰的存法一致。RSA 和 EC 要公鑰,不是憑證。exp 過了是安全檢查裡的警告,不是簽章對不上。

    HS256 和 RS256 怎麼選?

    HS256 是一把共用金鑰。RS256 用私鑰簽發、公鑰驗簽。不要把 HMAC 金鑰交給別的服務,交給他們公鑰。

    alg 為 none 是什麼?

    標頭表示沒有簽章。這一頁不會把它當成有效權杖。

    權杖外流了,這一頁能作廢嗎?

    不能。把簽發方的 exp 設短,或在簽發方做失效名單。

    貼到這裡安全嗎?

    驗簽在瀏覽器裡完成。用 JWKS 驗簽是唯一的請求,而且只下載公鑰,不上傳權杖。即便如此,也不要在共用電腦上貼上還在生效的正式權杖。時間差了幾小時的話,數字本身是 UTC,承載下面那一行是這台電腦的鐘。