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

您目前查看的是 ApigeeApigee Hybrid 說明文件。
查看 Apigee Edge 說明文件。

Apigee 提供一系列工具和政策,可讓您實作以 OAuth 2.0 權杖為基礎的驗證機制,確保 API 安全無虞。OAuth2 是最廣為支援的開放式標準,適用於 API 的驗證和授權,詳情請參閱 IETF RFC 6749。這項標準會將權杖建立為標準格式的憑證,供用戶端應用程式傳送至 API 實作項目。API 實作項目可以驗證權杖,判斷用戶端是否有權存取 API。

Apigee 允許開發人員實作四種 OAuth2 授權類型中的任一種,藉此產生存取和/或更新權杖,包括:用戶端憑證密碼隱含授權碼,並使用 OAuthv2 政策。此外,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 天,或任何適合您要支援的使用者體驗的時間。

延伸閱讀