我想在 Amazon Cognito 使用者集區中使用自訂範圍授予對 Amazon API Gateway API 資源的存取權。
簡短描述
在 Amazon Cognito 使用者集區中使用自訂範圍定義資源伺服器。然後,為您的 API Gateway API 建立並設定 Amazon Cognito 授權方,以驗證對 API 資源的請求。
如果您有不同的應用程式用戶端,且它們需要不同層級的 API 資源存取權限,則可以根據您定義的自訂範圍提供不同的存取權限。請考慮不同的應用程式用戶端可能需要的細微存取權限層級,然後進行相應的設計。
解決方案
請建立下列先決條件:
在您的使用者集區使用自訂範圍新增資源伺服器
-
開啟 Amazon Cognito 主控台。
-
定義資源伺服器和自訂範圍。
-
建立資源伺服器後,選擇應用程式整合索引標籤。
-
在應用程式用戶端和分析區段,選取您的應用程式用戶端。
-
在託管 UI 區段,選擇編輯。然後完成以下步驟:
在 OAuth 2.0 授與類型下拉式清單,選擇隱含授與。
在自訂範圍下拉式清單,選擇您定義的自訂範圍。
注意: 自訂範圍的格式為 resourceServerIdentifier/scopeName。當用戶端在 OAuth 2.0 流程中請求自訂範圍時,該請求必須包含此格式的完整範圍識別碼。
6. 選擇儲存變更。
如果您的行動應用程式具備伺服器端元件,請使用授權碼授權流程和 Proof Key for Code Exchange (PKCE)。使用授權碼授權流程,權杖更加安全,並且永遠不會直接暴露給最終使用者。
如果您的設定不包含任何伺服器端邏輯,則可以使用隱含授與流程。隱含授與不會產生重新整理權杖。這樣可以防止重新整理權杖暴露給用戶端。重新整理權杖的有效性較長,用於擷取較新的 ID 和存取權杖。
重要事項: 請勿將重新整理權杖儲存在用戶端環境。
如需詳細資訊,請參閱 應用程式用戶端設定術語。如需 Amazon Cognito 使用者集區 OAuth 2.0 授與的詳細資訊,請參閱了解 Amazon Cognito 使用者集區 OAuth 2.0 授與。
建立授權方,並將其與您的 API 整合
若要完成下列步驟,請依照指示將 REST API 與 Amazon Cognito 使用者集區整合。
-
若要建立授權方,請依照使用 API Gateway 主控台建立 COGNITO_USER_POOLS 授權方的指示進行操作。
注意: 建立之後,主控台會出現用於測試授權方的選項。此測試需要身分權杖。若要在主控台之外使用存取權杖測試您的設定,請參閱本文的取得用於測試的使用者集區存取權杖一節。
-
若要將授權方與您的 API 整合,請依照在方法上設定 COGNITO_USER_POOLS 授權方的指示進行操作。
注意: 對於 OAuth 範圍,請按照以下格式輸入自訂範圍的完整 resourceServerIdentifier/scopeName 識別碼/範圍名稱格式輸入自訂範圍的完整識別碼。
-
部署您的 API。
取得用於測試的使用者集區存取權杖
使用您使用者集區的託管 Web UI 登入 Amazon Cognito 授權伺服器並從中擷取存取權杖。或者,使用行動和 Web 版 AWS SDK 提供 OAuth 2.0 端點實現以擷取存取權杖。
注意: 當應用程式用戶端透過託管 Web UI 請求身份驗證時,請求可以包含系統保留範圍或自訂範圍的任何組合。如果用戶端不請求任何範圍,則身份驗證伺服器會傳回一個存取權杖,其中包含與用戶端相關聯的所有範圍。當您設計應用程式用戶端時,請確保用戶端在請求中包含預期範圍,以避免授予不必要的權限。
-
在網頁瀏覽器中輸入以下網址:
https://yourDomainPrefix.auth.region.amazoncognito.com/login?response_type=token&client_id=yourClientId&redirect_uri=redirectUrl
注意: 使用您使用者集區的值取代 yourDomainPrefix 和 region。在 Amazon Cognito 主控台使用者集區的網域名稱索引標籤找到這些值。
使用您的應用程用戶端 ID 取代 yourClientId,並使用您應用程式用戶端的回呼 URL 取代 redirectUrl。在主控台使用者集區的應用程式用戶端設定索引標籤找到這些值。如需詳細資訊,請參閱登入端點。
-
以您建立的使用者身分登入您的使用者集區。
-
從網址列的 URL 複製存取權杖。權杖是由字元組成的長字串,位於 access_token= 之後。
呼叫您的 API 作為測試
使用存取權杖用作授權標頭的值來呼叫您的 API,以進行測試。您可以使用 Postman 應用程式 (在 Postman 網站上) 或命令列介面的 curl 命令。如需 curl 的詳細資訊,請參閱 curl 專案網站。
若要使用 curl,請執行下列命令:
curl https://restApiId.execute-api.region.amazonaws.com/stageName/resourceName -H "Authorization: accessToken"
注意: 使用該 API ID 取代 restApiId。使用您 API 的 AWS 區域取代 region。使用您 API 的部署階段名稱取代 stageName。使用 API 資源名稱取代 resourceName。使用您複製的權杖取代 accessToken。如需詳細資訊,請參閱在 Amazon API Gateway 中叫用 REST API。
如果一切都設定正確,您將收到 200 OK 回應代碼。
相關資訊
設定使用者集區應用程式用戶端
存取權杖範圍 (OAuth 2.0 授權架構)