開發與資安

要看 JWT 內容前,哪些資訊不該貼進公開處?

排查 JWT 時先把真實憑證留在授權環境,以測試權杖查看 Header、Payload 與時間欄位,並分清解碼與驗證。

撰文: 3sec 編輯部 資料查證日期: 4 分鐘閱讀 1528 字

真實 JWT 不該被貼到公開網站、群組、工單或共用文件。排查前先問清楚「我真正需要看哪個欄位?」,再用測試環境的合成權杖重現,通常比複製生產憑證更快也更容易說清楚。

先把問題縮成一個可回答的欄位

多數 JWT 排查只需要比對欄位名稱、類型與預期值,不需要把整串權杖傳給別人。先寫下想確認的事,例如「aud 是否指向測試 API」、「exp 是否被產生成數字」,或「角色欄位是陣列還是字串」。

例如手機 App 在測試區回傳 401,而同一帳號在網頁版正常。可以請測試環境根據合成帳號發出短效權杖,比對兩邊的欄位結構;工單裡只記錄「手機版的 aud 少了預期值」,不附原始 Authorization 標頭、Cookie 或螢幕截圖。

連局部替換字元都不是理想的分享方法。JWT 的簽章對應特定內容,改了 Header 或 Payload 後,它就不再是可驗證的原樣本。要重現格式,請用刻意建立的合成資料;要報告現象,請改寫成最小的欄位摘要。

看得懂 JWT,不代表它已被驗證

解碼是把編碼內容還原成可讀結構;驗證則是發行系統根據金鑰與政策作出信任決定。這兩件事必須分開記錄。

RFC 7519 將 JWT 定義為承載 claims 的緊湊表示方式;內容可以放在 JWS 中簽署或做完整性保護,也可以放在 JWE 中加密。因此,「有簽章段」不等於「Payload 不可讀」,更不等於可以將憑證公開。

exp 也只是信任決定的一部分。瀏覽器顯示該時間尚未到,不能證明簽章正確、發行者符合、受眾包含當前服務,也不能排除撤銷或環境混用。RFC 8725 特別強調演算法、密碼運算、發行者、受眾與應用情境的驗證。正式結果必須以發行系統的核准程式庫、設定與正式來源為準。

只用安全樣本觀察頁面真正會做的事

將合成測試權杖貼進 JWT Decoder 時,只把結果當成結構觀察。現有頁面會要求剛好三個以句點分隔的區段,將前兩段做 base64url 解碼後以 JSON 顯示,並顯示第三段的簽章字串。

當 iat 或 exp 是數字時,頁面還會把它們轉成本機日期時間,對尚未到期的 exp 顯示約略剩餘時間。這是解碼與時鐘比對,不會用金鑰驗簽,也不會檢查 iss、aud、nbf、撤銷狀態或 API 的授權規則。頁面上的「有效」只能解讀為「當前可剖析,而且數字型 exp 尚未過期」。

檢查時可以把預期結果與當下顯示寫成兩列:例如預期 aud 是測試 API,實際樣本卻是另一個客戶端。然後回到測試伺服器,用真正的驗證路徑記錄接受或拒絕。不要把解碼頁截圖當成身分驗證證據。

用最小診斷紀錄取代原始權杖

可分享的診斷紀錄應該只留與問題直接相關的欄位名、資料類型與合成值。一份好的紀錄會說「roles 預期為陣列,當下卻是單一字串」,不會複製真實帳號、租戶、電子郵件、權限值、完整憑證或內部主機名。

如果只有一份普通文字摘要,個資遮蔽工具 可以幫忙找出部分姓名、電話、身分證、Email 與地址格式,但它無法辨識每種自訂 claim、系統代碼或憑證。不要把完整 JWT 貼進遮蔽工具就認為可以對外傳送。

傳送前再搜尋一遍訊息、附件、螢幕截圖、瀏覽器開發工具與日誌,確認沒有 Bearer 、Cookie、完整三段字串與可回推身分的真實值。若憑證權限高或涉及客戶資料,再請另一人只檢查要送出的版本。

已經外洩時,不要把刪除訊息當成處理完成

真實權杖一旦進入未授權的工單、聊天室、文件或螢幕截圖,就應依發行系統的事件流程評估撤銷或輪替。編輯原訊息可以減少後續曝光,卻不能證明沒有副本、通知或日誌留存。

處理後的核對也要回到發行系統:確認舊憑證已按政策失效、新憑證只授予必要範圍,並查看異常存取紀錄。通用解碼器不知道你的伺服器是否已完成這些動作。

常見問題

只分享 Payload,不分享簽章段可以嗎?

不建議直接分享真實 Payload。裡面仍可能包含使用者、租戶、角色、會話與內部系統資訊,請改用合成值或欄位摘要。

頁面顯示「有效」,API 就一定接受嗎?

不一定。這個標示沒有驗證簽章、發行者、受眾、撤銷狀態與應用政策,接受結果要在發行系統的測試路徑確認。

瀏覽器本機解碼就沒有風險嗎?

不是。本機解碼減少了一條傳送路徑,但剪貼簿紀錄、瀏覽器擴充、螢幕擷取與組織設備政策仍然需要考慮。

加密 JWT 也是三段嗎?

不能這樣假設。JWS 緊湊表示常見為三段,JWE 緊湊表示則有不同結構;某些 access token 也是無法直接解讀的 opaque token。應先看發行方文件。

已把生產權杖貼進群組怎麼辦?

立即沿發行方的事件流程通報,評估撤銷或輪替,並檢查存取紀錄與權限範圍。不要只等待 exp 時間到或只刪除看得到的訊息。

參考資料