反模式:為 OAuth 權杖設定無到期時間

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

Apigee Edge 提供 OAuth 2.0 架構來保護 API。OAuth2 是最常見的開放標準權杖式驗證與授權配置之一。可讓用戶端應用程式代表使用者存取 API,不必要求使用者提供使用者名稱和密碼。

Apigee Edge 可讓開發人員採用 OAuthv2 政策實作下列四種 OAuth2 授權類型之一,產生存取權和/或更新權杖:用戶端憑證密碼隱含授權碼。用戶端應用程式會使用存取權杖來使用安全的 API。每個存取權杖都有各自的到期時間,您可以在 OAuthv2 政策中設定。

您可選擇一併核發更新權杖以及存取權杖和部分授權類型的存取權杖。原始存取權杖過期或遭撤銷後,系統會使用重新整理權杖取得新的有效存取權杖。您也可以在 OAuthv2 政策中設定更新權杖的到期時間。

這項反模式與為 OAuth 權杖設定長時間到期時間的反模式有關。

反模式

OAuthv2 政策中,沒有為更新權杖設定到期時間,會導致 OAuth 權杖累積量,並在 Cassandra 節點上增加磁碟空間。

以下 OAuthV2 政策範例顯示 <RefreshTokenExpiresIn> 缺少的設定:

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <!--<RefreshTokenExpiresIn> is missing -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

在上述範例中:

  • 存取權杖的到期時間會合理設為 30 分鐘。
  • 未設定更新權杖的到期時間。
  • 更新權杖會永久保留在資料儲存庫 (Cassandra) 中,導致資料累積。
  • 沒有到期時間的更新權杖可以無限期用來產生存取權杖。
  • 如果傳送至這個 API 的流量為每秒 10 個要求,則一天最多可產生 864,000 個權杖。

影響程度

  • 如果更新權杖在沒有到期日的情況下建立,有兩個主要結果:
    • 更新權杖未來隨時可以使用 (可能是多年的時間) 來取得存取權杖。這可能會對安全性產生影響。
    • 系統一律不會刪除 Cassandra 中包含更新權杖的資料列。 這會導致資料在 Cassandra 中累積。
  • 如果您不是使用更新權杖來取得新的存取權杖,而是建立新的更新權杖和存取權杖,舊的更新權杖仍會保留在 Cassandra 中。因此,重新整理權杖將繼續在 Cassandra 中累積,進一步增加大量增加、磁碟用量和較大的壓縮,最終導致 Cassandra 造成讀取/寫入延遲時間。

最佳做法

請針對重新整理和存取權杖使用適當的到期時間。如要瞭解如何設定更新及存取權杖的到期時間,請參閱最佳做法。請務必在政策中為存取權和更新權杖指定到期時間設定。如要進一步瞭解政策設定,請參閱 OauthV2 政策說明文件

Edge 私有雲客戶專屬最佳做法

本節說明 Edge 專屬 Cloud 客戶的最佳做法。

指定預設的更新權杖到期時間

根據預設,如果政策設定中未指定更新憑證到期時間,Edge 會建立沒有到期時間的更新權杖。如要覆寫這個行為,請按照下列程序操作:

  1. 在訊息處理工具節點上,編輯或建立設定檔覆寫檔案 $APIGEE_ROOT/customer/application/message-processor.properties。請確認 apigee 使用者能夠讀取這個檔案。
  2. 在檔案中加入以下這行內容:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
    如果您未在政策中指定任何更新憑證,系統會將預設的更新憑證到期時間設為 1 小時。 您可以根據業務需求變更這項預設價值。
  3. 重新啟動訊息處理工具服務:
    apigee-service edge-message-processor restart
  4. 在所有訊息處理器節點中逐一重複執行上述步驟。

Cassandra 的最佳做法

嘗試升級至可公開發布的最新版 Apigee。Apigee 會持續發布修正和強化功能,持續改善及最佳化 Apigee 中的權杖管理。在 Apigee 中,存取和重新整理權杖會儲存在 Cassandra 中,位於「kms」鍵空間內。您應確保這個鍵空間的壓縮策略已設為 LeveledCompactionStrategy。請檢查下列索引是否「並未」存在:
  • 公里 s.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx#f0f0f0 和
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx

您也可以將資料表 kms.oauth_20_access_tokens 中的 gc_grace_seconds 從預設的 10 天縮減為較低的值 (例如 3 天),以確保因刪除權杖而產生的空值,能更快從資料儲存庫中清除。

其他資訊