」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 建立有效的 JWT 聲明集

建立有效的 JWT 聲明集

發佈於2024-11-04
瀏覽:192

Building a valid JWT Claims Set

簡介

我需要審查一個拉取請求,該請求正在修復樣本報告的問題,並且在測試通過時,感覺樣本中肯定還有更多事情需要更改。

我了解 JSON Web Token(JWT 發音為“jots”)有一段時間了,但我不知道它們。看到這個 PR 讓我有理由進一步深入研究它們。

什麼是 JWT

JWT 是一種用於在各方之間安全傳輸資訊的開放標準方法。它們通常用於驗證使用者身分並授權對資源的存取。它們由 3 部分組成:標頭、有效負載和簽名。

為什麼需要 JWT

IAM 服務帳戶憑證 API 建立短期憑證來模擬 IAM 服務帳戶。 SignJwt 方法將使用服務帳戶的系統管理私鑰對 JWT 進行簽署。在signJwt方法的請求正文中,有效負載欄位應包含一個序列化的JSON對象,該物件包含JWT聲明集。

什麼是智威湯遜聲明

聲明是 JWT 傳輸的核心訊息。

以下是有效聲明集的範例:

{
  "iss": "https://cloud.google.com/iam",
  "sub": "projects/-/serviceAccounts/[email protected]",
  "aud": "https://my-iap-protected-app.example.com",
  "iat": 1694003600,
  "exp": 1694007200
}

此聲明集包括以下欄位:

  • iss:JWT 的頒發者,將進行身份驗證的服務帳戶,在本例中應該是服務帳戶電子郵件。
  • sub:JWT 的使用者主題,即服務帳戶電子郵件。
  • aud:JWT 的受眾,即受 IAP 保護的資源的 URL。
  • iat:issued at time,即產生JWT的時間。這必須是 UTC 格式的整數。
  • exp:過期時間,即JWT將不再有效的時間。 Cloud IAM 記錄了其他限制:不能是過去的時間,也不能是未來超過 12 小時的時間。

透過將這些聲明包含在 JWT 的有效負載中,您可以確保其有效並可用於存取受 IAP 保護的資源。

關於那個公關

原始碼看起來像

    iat = datetime.datetime.now(tz=datetime.timezone.utc)
    exp = iat   3600
    return json.dumps(
        {
            "iss": service_account_email,
            "sub": service_account_email,
            "aud": resource_url,
            "iat": iat,
            "exp": exp,
        }
    )

我知道測試出了問題,但我不想阻止解決此程式碼的根本問題。

PR 作者提交了更改

iat = datetime.datetime.now(tz=datetime.timezone.utc).timestamp()

這似乎是一個不完整的修復。根據 API 的文檔,我意識到提交的修復仍然不會將 iat 設為 int 類型,並且仍然失敗。我提出了一個小小的改變,可以解決 PR 的問題

now_utc = datetime.datetime.now(tz=datetime.timezone.utc)  
iat = int(now_utc.timestamp())

我想得越多,我意識到日期時間對於這個範例沒有用處。 Datetime 模組提供了用於操作日期和時間的類,當您需要日期時,這些類非常有用。我們確實需要一個 UTC 格式的整數,因此 Time 模組更有用。

Insetad,我們可以做到

  now = int(time.time())

    return json.dumps(
        {
            "iss": service_account_email,
            "sub": service_account_email,
            "aud": resource_url,
            "iat": now,
            "exp": now   3600,
        }
    )

在此處找到此範例的完整(更新!)程式碼。

版本聲明 本文轉載於:https://dev.to/sigje/building-a-valid-jwt-claims-set-4l58?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3