管理使用者集區字符過期和快取 - Amazon Cognito

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

管理使用者集區字符過期和快取

每次您想要獲取新的 JSON Web 權杖 (JWT) 時,您的應用程式都必須成功完成以下請求之一。

  • 權杖端點請求用戶端憑證或授權碼授與

  • 從受管登入頁面請求隱含授予。

  • 在 Amazon Cognito API 請求 (例如 InitiateAuth) 中驗證本機使用者。

您可以設定使用者集區,將權杖設定為在幾分鐘、幾小時或幾天後過期。為了確保應用程式的效能和可用性,請在字符生命週期的大約 75% 內使用 Amazon Cognito 字符,然後只擷取新的字符。您為應用程式建立的快取解決方案可讓權杖保持可用,並在請求率過高時防止 Amazon Cognito 拒絕請求。用戶端應用程式必須將權杖儲存在記憶體快取中。伺服器端應用程式可以新增加密的快取機制來儲存權杖。

當您的使用者集區產生大量的使用者或機器對機器活動時,您可能會遇到 Amazon Cognito 針對您可發出的權杖請求數量設定的限制。為了減少對 Amazon Cognito 端點發出的請求數量,您可以安全地存放和重複使用驗證資料,或實施指數退避和重試。

驗證資料來自兩種端點類別。Amazon Cognito OAuth 2.0 端點包含權杖端點,該端點服務用戶端登入資料和受管登入授權碼請求。服務端點會回答使用者集區 API 請求,如 InitiateAuthRespondToAuthChallenge。每種類型的請求都有自己的限制。如需限制的詳細資訊,請參閱 Amazon Cognito 的配額

使用 Amazon API Gateway 快取機器對機器存取權杖

透過 API Gateway 權杖快取,您的應用程式可以擴展以回應大於 Amazon Cognito OAuth 端點預設請求率配額的事件。

維護 M2M 存取字符快取的 API Gateway 圖表。API 代理會處理權杖請求,如果快取權杖已經有效,則傳回快取權杖。

您可以快取存取權杖,以便您的應用僅在快取權杖過期時請求新的存取權杖。否則,您的快取端點會從快取傳回權杖。如此可防止額外呼叫 Amazon Cognito API 端點。當您使用 Amazon API Gateway 作為 權杖端點 的代理時,您的 API 會回應大部分請求,否則請求會佔用配額,以避免因為速率限制導致請求失敗。

以下 API Gateway 解決方案提供低延遲、低程式碼/無程式碼的權杖快取實作。API Gateway API 在傳輸過程中進行加密,並可選擇是否在靜態時加密。API Gateway 快取是 OAuth 2.0 的用戶端憑證授與的理想選擇,一種頻繁的大容量授與類型,可產生存取權杖以授權機器對機器和微服務工作階段。如果流量激增導致您的微服務水平擴展,您可以在超過使用者集區或應用程式用戶端 AWS 請求率限制的磁碟區中使用相同的用戶端登入資料,最終會有許多系統。為了保持應用程式可用性和低延遲,快取解決方案是在這種情況下的最佳做法。

在此解決方案中,您可以在 API 中定義快取,以為要在應用程式中請求的每個 OAuth 範圍和應用程式用戶端組合儲存單獨的存取權杖。當您的應用程式發出符合快取金鑰的請求時,您的 API 會以 Amazon Cognito 對符合快取金鑰的第一個請求發出的存取權杖進行回應。當您的快取金鑰持續時間過期時,您的 API 將請求轉發到權杖端點並快取新的存取權杖。

注意

您的快取金鑰持續時間必須短於應用程式用戶端的存取權杖持續時間。

快取金鑰是您在請求內文的 scope 參數中請求的 OAuth 範圍和請求中的 Authorization 標頭的組合。Authorization 標題包含您的應用程式用戶端 ID 和用戶端密碼。您無需在應用程式中實作其他邏輯即可實現此解決方案。您只能更新組態以變更使用者集區權杖端點的路徑。

您也可以使用 ElastiCache (Redis OSS) 實作權杖快取。如需使用 AWS Identity and Access Management (IAM) 政策進行精細控制,請考慮 Amazon DynamoDB 快取。

注意

API Gateway 中的快取需支付額外費用。如需詳細資訊,請參閱定價。

使用 API Gateway 設定快取代理

  1. 開啟 API Gateway 主控台並建立 REST API。

  2. Resources (資源) 中,建立 POST 方法。

    1. 選擇 HTTP Integration type (整合類型)。

    2. 選擇 Use HTTP proxy integration (使用 HTTP 代理整合)。

    3. 輸入 https://<your user pool domain>/oauth2/tokenEndpoint URL (端點 URL)。

  3. Resources (資源) 中,設定快取金鑰。

    1. 編輯您 POST 方法的 Method request (方法請求)。

    2. 設定您的 scope 參數和 Authorization 標題作為您的快取金鑰。

      1. 將查詢字串新增至 URL query string parameters (URL 查詢字串參數) 並為 scope 字串選擇 Caching (快取)。

      2. 將標頭新增至 HTTP request headers (HTTP 請求標頭) 並為 Authorization 標頭選擇 Caching (快取)。

  4. Stages (階段) 中,設定快取。

    1. 選擇您要修改的階段,然後選擇從階段詳細資訊編輯

    2. 其他設定快取設定下,開啟佈建 API 快取選項。

    3. 選擇 Cache capacity (快取容量)。更高的快取容量可改善效能,但需額外付費。

    4. 清除 需要授權 核取方塊。選取繼續

    5. API Gateway 只會將快取政策套用到階段層級的 GET 方法。您必須將快取政策覆寫套用至 POST 方法。

      展開您設定的階段,然後選取 POST 方法。若要為 方法建立快取設定,請選擇建立覆寫

    6. 啟用啟用方法快取選項。

    7. 輸入 3600 秒的快取time-to-live (TTL)。選擇 Save (儲存)。

  5. Stages (階段) 中,記下 Invoke URL (叫用 URL)。

  6. 更新您的應用程式以將權杖請求 POST 到 API 的 Invoke URL (叫用網址),而不是使用者集區的 /oauth2/token 端點。