您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
Apigee Edge 提供 OAuth 2.0 架構,可保護 API 安全。OAuth2 是最熱門的開放標準之一,採用權杖式驗證和授權機制。這樣一來,用戶端應用程式就能代表使用者存取 API,不必要求使用者提供使用者名稱和密碼。
Apigee Edge 允許開發人員實作四種 OAuth2 授權類型中的任一種,藉此產生存取和/或更新權杖,包括:用戶端憑證、密碼、隱含和授權碼,並使用 OAuthv2 政策。用戶端應用程式會使用存取權杖來取用安全 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 for Private Cloud 客戶提供的最佳做法
本節說明 Edge for Private Cloud 客戶適用的最佳做法。
指定預設更新權杖到期時間
根據預設,如果政策設定中未指定更新權杖到期時間,Edge 會建立沒有到期時間的更新權杖。您可以按照下列程序覆寫這項行為:
- 在訊息處理器節點上,編輯或建立設定覆寫檔案
$APIGEE_ROOT/customer/application/message-processor.properties。請確認apigee使用者可讀取這個檔案。 - 在檔案中新增下列這行文字:
如果政策中未指定任何值,這會將預設的更新權杖到期時間設為 1 小時。您可以根據業務需求變更這個預設值。conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
- 重新啟動 Message processor 服務:
apigee-service edge-message-processor restart
- 在所有訊息處理器節點中,逐一重複上述步驟。
Cassandra 最佳做法
請嘗試升級至公開發布的最新版 Apigee。Apigee 持續發布修正和強化功能,進一步改善及最佳化 Apigee 中的權杖管理。在 Apigee 中,存取和重新整理權杖會儲存在「kms」鍵空間的 Cassandra 中。請務必將這個鍵空間的壓縮策略設為LeveledCompactionStrategy。請檢查下列索引是否不存在:
- kms.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx#f0f0f0 和
- kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx
您也可以將資料表中的 gc_grace_seconds kms.oauth_20_access_tokens 預設值從 10 天調低至 3 天等較低的值,確保因刪除權杖而產生的墓碑能更快從資料儲存庫清除。