開發者工具 · JWT 解碼器
RFC 8725 解釋:JWT 驗證者目前最佳實踐
· 背景
jwt 安全 身份驗證
IETF 將已知的 JWT 陷阱收集到一份目前最佳實務檔案中。這篇文章將詳細介紹其建議,並將每個建議與其所預防的事件類別聯繫起來。
重複出現的 JWT 失敗會激發驗證者檢查表;儲存庫來源不建立發布歷史記錄
靈活的令牌格式允許驗證者必須限制的組合。重複的錯誤包括信任演演算法標籤、接受錯誤發行者或受眾的令牌以及遵循攻擊者選擇的密鑰材料。檢查表將這些廣泛的風險轉化為實際接受邊界的拒絕測試。
此大綱將發布歷史記錄歸因於特定年份,但儲存庫來源不驗證該歷史記錄,因此本節省略它。可操作的區別是在本地建立的:ToolAcre 僅解碼,而每個最佳實踐決策都屬於配置的驗證者。
固定演演算法並拒絕任何演演算法 - 解決 alg:none 和金鑰混淆問題的建議
獨立於標頭固定允許的演演算法,並拒絕需要簽名的流中的未簽名輸入。將每個接受的演演算法系列綁定到正確的密鑰類型。不要讓令牌將驗證程式從非對稱檢查切換到 HMAC 或使用 `none` 停用檢查。
ToolAcre 標記 `none` 並解釋識別的標籤,但這些警告不執行任何操作。透過針對後端的負面測試來證明真實策略:意外的演演算法、空簽章和錯誤的金鑰類型必須失敗,即使它們的前兩個段落仍然可解碼。
驗證受眾和發行者 - 針對跨服務重播的建議
在可信任金鑰配置下對頒發者進行驗證,然後將目標受眾與消費服務進行比較。沒有上下文宣告檢查的有效簽章仍然可以在錯誤的位置授權令牌。複製的頒發者字串本身不是鍵綁定。
解碼器在不知道預期配置的情況下顯示 `iss` 和 `aud` 值。使用這種可見性來識別測試案例,而不是做出結論。驗收測試應區分錯誤的發行者、錯誤的受眾和簽名失敗,以便操作日誌仍然有用。
使用明確類型-類型標頭作為標記替換的防禦
明確標記類型可以分隔配置檔案,否則會重複使用類似的宣告形狀。驗證者應該知道它期望特定端點的類型並拒絕不相容的配置檔案,而不是將每個簽署的 JWT 視為可互換的。
`typ` 標頭在驗證之前仍然不受信任,且 ToolAcre 僅在其字串與 `JWT` 不同時發出警告。它不驗證存取令牌設定檔、嵌套內容或提供者約定。在應用程式中定義類型規則並測試替換嘗試。
不要信任 jku、x5u 或嵌入式金鑰 - 金鑰來源建議
不要讓 `jku`、`x5u`、嵌入式 JWK 資料或憑證陣列僅僅因為它們出現在受保護的標頭中而建立密鑰來源。透過獨立可信任的頒發者關係和受約束的檢索策略來解析密鑰。僅將 `kid` 視為該邊界內的選擇器。
ToolAcre 不會根據標頭值執行網路查找。這是普通檢查員的正確行為。在審核期間,追蹤從標頭元資料到檔案系統、快取、資料庫和網路操作的每條路徑,然後拒絕從令牌控制的輸入建立信任的任何路徑。
必須在所選庫和設定檔中檢查加密輸入和加密內容指南
加密實作必須驗證輸入並遵循所選設定檔的規則。加密設計還需要注意壓縮和可觀察資料。確切的 API 和預設值是特定於庫的,並不存在於此儲存庫中,因此本文不會發明開關或聲稱通用支援。
閱讀已部署庫和版本的當前文件,然後建立格式錯誤的輸入和策略不匹配的測試。解碼器的乾淨 INVALID_JWT 錯誤證明了良好的檢查人體工學,但它們並不能證明單獨的驗證器可以正確處理加密邊緣情況。
工作範例 — 根據清單審核驗證例程
透過列出受信任的發行者配置、接受的演演算法、金鑰來源、受眾、令牌類型、時間策略和應用程式宣告來審核驗證例程。對於每一項,添加一個語法上可讀但完全違反一個期望的否定標記。確認真實邊界處的拒絕。
僅使用 ToolAcre 檢查每個夾具宣告的內容並確保存在預期的突變。不要使用其輸出作為夾具無效的斷言。驗證者的回應和日誌提供了證據,而解碼器在接受和拒絕的範例中保持不變。
重點:檢查表,而不是庫 — ToolAcre JWT 解碼器可協助您在審核期間檢查令牌;這些做法適用於您編寫的驗證程序
最佳實務檔案是檢查表,而不是驗證庫。當團隊將建議轉化為明確配置、狹窄的信任關係和失敗的測試時,它的價值就顯現出來了。解碼器可以在該工作期間使令牌輸入清晰,但無法實現控制。
維護檔案和 UI 中的邊界:解碼表示可讀、不真實、未經修改、授權或可接受。將策略固定在令牌之外,首先驗證,然後套用宣告。 ToolAcre 有意在所有這些決定之前停止。