開發者工具 · JWT 解碼器
除錯 401:在指責 API 之前在解碼的 JWT 中檢查什麼
· 為什麼它很重要
jwt 偵錯 身份驗證
大多數令牌拒絕都歸結為一些您可以透過讀取有效負載發現的索賠問題。這篇文章提供了一個清單,從過期到受眾再到複製貼上錯誤,以便檢查它們。
昨天工作了 - 401 出現,沒有程式碼更改
在未更改客戶端程式碼的情況下出現的 401 可能源自於令牌年齡、發行者政策、金鑰輪替、受眾選擇或損壞的副本。從證據開始,而不是假設 API 已關閉。在操作憑證之前保留回應詳細資訊和相關識別碼。
僅解碼過期的、合成的或適當控制的副本。 ToolAcre 可以公開結構和索賠線索,但它無法識別每個伺服器拒絕,因為它沒有密鑰、發行者策略或 API 日誌。清單縮小了問題範圍;它不會取代資源伺服器的判決。
首先複製錯誤 - 'Bearer' 前綴、尾隨換行符和截斷的標記
先檢查複製的值。 ToolAcre 會修剪周圍的空白並刪除一個不區分大小寫的 `Bearer ` 前綴,該前綴處理常見的授權標頭貼上。然後它需要正好三個點分隔的段。在索賠分析開始之前,錯誤的計數會導致截斷、錯誤的標記形式或額外的標點符號。
空標頭或有效負載會特別失敗。無效的 base64url、無效的 UTF-8 和無效的 JSON 有單獨的錯誤。這些差異有助於確定運輸是否損壞了代幣。簽名可能格式錯誤,但不會阻止檢查,但該警告仍然可能是驗證失敗,需要伺服器端確認。
exp 和 nbf:檢查基於秒的值,而不將顯示轉變為有效性判定
接下來檢查數字 `exp` 和 `nbf` 值。 ToolAcre 將秒乘以 1,000,顯示 UTC 並標記相對於瀏覽器時鐘的較早到期或未來不早於。十三位數的值可能會顯示在預期秒數的位置寫入了毫秒。
請勿將這些標籤推廣至強制執行。偽造的令牌可以聲稱未來到期,並伺服器可以使用不同的時鐘或餘地策略。顯示識別值得與可信任日誌進行比較的算術;密碼驗證必須成功,宣告才能影響接受。
aud 和 iss — 這是此 API 的令牌,來自此 API 信任的發行者嗎?
`aud` 應根據 API 策略識別預期接收者,而 `iss` 應符合受信任的頒發者關係。 ToolAcre 將兩者都列為解碼值並解釋了它們的註冊含義。它不會將它們與 API 配置進行比較,也不會將頒發者字串綁定到金鑰集。
可以偽造合理的發行者 URL 和受眾名稱。僅在保留簽章驗證邊界後,才將準確的解碼值與伺服器配置的期望進行比較。如果多個服務共享身分基礎設施,則受眾檢查對於防止一項服務的有效令牌在另一項服務中使用尤其重要。
令牌類型可能由標頭和宣告建議,但解碼無法驗證該分類
ID 令牌和存取權杖看起來都像是由三個部分組成的 JWT。標題 `typ`、受眾、範圍和特定於個人資料的宣告可能會建議您持有哪一個。 ToolAcre 會警告意外字串 `typ`,但它不會實作 OpenID Connect 或 OAuth 令牌分類。
使用發行者文件和用戶端流程來建立預期的令牌類型。即使 ID 令牌的簽章對於身分提供者有效,將 ID 令牌傳送到 API 也可能會失敗。解碼支援診斷;它無法驗證類型標籤或授予 API 權限。
kids — 引用伺服器不再擁有的密鑰的有效令牌
金鑰輪替後,標頭 `kid` 可能引用伺服器目前可信任集中不存在的金鑰。讀取標識符,然後檢查驗證器上的快取和密鑰集日誌。不要取得標頭提供的 URL 或接受嵌入的金鑰資料作為快速解決方法。
如果驗證者無法找到允許的金鑰,正確簽署的令牌仍可能失敗,而攻擊者可以將任何 `kid` 寫入未經驗證的標頭。該值是受可信任頒發者配置約束的查找提示,而不是應該相信特定密鑰的證據。
工作範例 — 透過 ToolAcre JWT 解碼器中的清單執行拒絕的令牌
對於有效分類,採用受控拒絕令牌,確認三個段,檢查錯誤,然後記錄 `exp`、`nbf`、`aud`、`iss`、`typ` 和 `kid`,而不對其進行編輯。將每個欄位與請求的目標 API 和驗證者的可信任配置進行比較。保持伺服器日誌開啟以了解實際的故障類別。
如果所有可見值看起來都符合預期,請不要斷定 API 是錯誤的。簽章損壞、錯誤的金鑰材料、撤銷狀態或未顯示的策略仍然可以解釋 401。無論 JSON 看起來多麼整潔,ToolAcre 的 `signatureVerified` 仍然是 false。
這不包括什麼以及要點 - 解碼器無法告訴您簽名是否有效;檢查表發現索賠問題,簽名失敗需要伺服器日誌
解碼器無法告訴您簽名是否有效。它的宣告清單發現了無需密鑰即可看到的複製和有效負載問題;簽名失敗和權威策略決策需要伺服器證據。將解碼視為多種診斷觀察中的一種。
最快的可靠路徑是有序的:保留回應上下文,檢查令牌形狀,比較時間單位,然後將發行者、受眾、類型和密鑰標識符與可信任配置進行比較。在真正的驗證者確認密碼學和策略之前,不要缺乏信任。