反模式:為 OAuth 權杖設定較長的到期時間

您正在查看 ApigeeApigee Hybrid 說明文件。
查看 Apigee Edge 說明文件。

Apigee 提供一組工具和政策,可讓您實作 OAuth 2.0 權杖驗證,確保 API 安全。 IETF RFC 6749 中所述的 OAuth2 是 API 驗證和授權最廣泛支援的開放標準。它將「權杖」設為用戶端應用程式傳送至 API 實作項目的標準格式憑證。API 實作可以驗證權杖,以判斷用戶端是否有權存取 API。

Apigee 允許開發人員使用 OAuthv2 政策,實作任何一種 OAuth2 授權類型 (用戶端憑證密碼隱含授權碼),產生存取和/或重新整理權杖。此外,API 開發人員可以使用 Apigee 實作自訂授權,包括遵循權杖交換模式的授權,如 IETF RFC 8693 所述。接著,用戶端應用程式會使用存取權杖來使用安全的 API。每個存取權權杖都有專屬的到期時間,可在 OAuthv2 政策中設定。

Apigee 可選擇使用部分授權類型產生並傳回重新整理權杖,以及存取權杖。在原始存取權權杖遭到撤銷或到期後,用戶端會使用更新權杖來取得新的存取權權杖。您也可以在 OAuthv2 政策中設定重新整理權杖的到期時間。

反模式

OAuthv2 政策中為存取權杖或重新整理權杖設定較長的到期時間,會導致在權杖外洩的情況下,擴大漏洞的風險時間窗,這代表安全性風險。這也可能導致 OAuth 權杖在永久儲存庫中累積,進而導致效能隨時間下降。

範例 1

以下 OAuthV2 政策範例顯示存取權憑證的到期時間為 10 天:

<OAuthV2 name="OAuth-GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>864000000</ExpiresIn> <!-- 10 days -->
    <RefreshTokenExpiresIn>864000000</RefreshTokenExpiresIn> <!-- 10 days -->
    <SupportedGrantTypes>
      <GrantType>authorization_code</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

在上述範例中:

  • 存取權杖的生命週期設為 10 天。
  • 重新整理權杖的有效期限也設為 10 天。

影響

長期存取權杖代表安全性風險。如果權杖遭到洩漏或遺失,短效權杖會自然到期並失效,而長效權杖則會在一段可能較長的時間內繼續授予 API 存取權,進而增加漏洞出現的時間窗口。

存取權杖的生命週期應較短,大約 30 分鐘或更短,且生命週期應比重新整理權杖的生命週期短得多。

範例 2

以下 OAuthV2 政策範例顯示更新憑證的長到期時間 (200 天):

<OAuthV2 name="OAuth-GenerateAccessToken">
  <Operation>GenerateAccessToken</Operation>
  <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
  <RefreshTokenExpiresIn>17280000000</RefreshTokenExpiresIn> <!-- 200 days -->
  <SupportedGrantTypes>
    <GrantType>authorization_code</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse enabled="true"/>
</OAuthV2>

在上述範例中:

  • 存取權杖的有效期限已設為 30 分鐘,這段時間短且合理。
  • 更新權杖的有效期限長達 200 天。
  • 如果這個 API 的流量為 10 個要求/秒,那麼一天內產生的權杖數量最多可達 864,000 個。
  • 重新整理權杖會在 200 天後到期,並會在整個生命週期內累積在資料儲存庫中。

影響

延長重新整理權杖的有效期限,可能會導致效能隨著時間而降低,因為資料儲存庫中會累積大量權杖。在 Apigee hybrid 中,過多的符記累積也可能導致持久層的磁碟空間耗盡。

最佳做法

請根據特定安全性需求,為 OAuth 存取權和重新整理權杖設定到期時間,以縮短權杖外洩的安全漏洞時間窗口,並避免權杖在資料儲存庫中累積。存取權杖的效期建議從 30 分鐘開始,更新權杖的效期則建議從 24 小時開始。

設定更新權杖的到期時間,讓權杖的有效時間是存取權杖的效期倍數。舉例來說,如果您將存取權杖的有效時間設為 30 分鐘,請將重新整理權杖的有效時間設為 24 小時或 7 天,或是根據您需要支援的使用者體驗,設定適當的有效時間。

延伸閱讀