首頁 >後端開發 >Python教學 >建立有效的 JWT 聲明集

建立有效的 JWT 聲明集

Patricia Arquette
Patricia Arquette原創
2024-09-29 11:35:301049瀏覽

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/my-service-account@my-project.iam.gserviceaccount.com",
  "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,
        }
    )

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

公關作者提交了更改

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,
        }
    )

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

以上是建立有效的 JWT 聲明集的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn