如何在 Amazon Cognito 中使用自訂範圍授予對 API Gateway API 的存取權?

2 分的閱讀內容
0

我想在 Amazon Cognito 使用者集區中使用自訂範圍授予對 Amazon API Gateway API 資源的存取權。

簡短描述

在 Amazon Cognito 使用者集區中使用自訂範圍定義資源伺服器。然後,為您的 API Gateway API 建立並設定 Amazon Cognito 授權方,以驗證對 API 資源的請求。

如果您有不同的應用程式用戶端,且它們需要不同層級的 API 資源存取權限,則可以根據您定義的自訂範圍提供不同的存取權限。請考慮不同的應用程式用戶端可能需要的細微存取權限層級,然後進行相應的設計。

解決方案

請建立下列先決條件:

在您的使用者集區使用自訂範圍新增資源伺服器

  1. 開啟 Amazon Cognito 主控台

  2. 定義資源伺服器和自訂範圍

  3. 建立資源伺服器後,選擇應用程式整合索引標籤。

  4. 應用程式用戶端和分析區段,選取您的應用程式用戶端。

  5. 託管 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 使用者集區整合

  1. 若要建立授權方,請依照使用 API Gateway 主控台建立 COGNITO_USER_POOLS 授權方的指示進行操作。
    注意: 建立之後,主控台會出現用於測試授權方的選項。此測試需要身分權杖。若要在主控台之外使用存取權杖測試您的設定,請參閱本文的取得用於測試的使用者集區存取權杖一節。

  2. 若要將授權方與您的 API 整合,請依照在方法上設定 COGNITO_USER_POOLS 授權方的指示進行操作。
    注意: 對於 OAuth 範圍,請按照以下格式輸入自訂範圍的完整 resourceServerIdentifier/scopeName 識別碼/範圍名稱格式輸入自訂範圍的完整識別碼。

  3. 部署您的 API

取得用於測試的使用者集區存取權杖

使用您使用者集區的託管 Web UI 登入 Amazon Cognito 授權伺服器並從中擷取存取權杖。或者,使用行動和 Web 版 AWS SDK 提供 OAuth 2.0 端點實現以擷取存取權杖。

注意: 當應用程式用戶端透過託管 Web UI 請求身份驗證時,請求可以包含系統保留範圍自訂範圍的任何組合。如果用戶端不請求任何範圍,則身份驗證伺服器會傳回一個存取權杖,其中包含與用戶端相關聯的所有範圍。當您設計應用程式用戶端時,請確保用戶端在請求中包含預期範圍,以避免授予不必要的權限。

  1. 在網頁瀏覽器中輸入以下網址:
    https://yourDomainPrefix.auth.region.amazoncognito.com/login?response_type=token&client_id=yourClientId&redirect_uri=redirectUrl
    注意: 使用您使用者集區的值取代 yourDomainPrefixregion。在 Amazon Cognito 主控台使用者集區的網域名稱索引標籤找到這些值。
    使用您的應用程用戶端 ID 取代 yourClientId,並使用您應用程式用戶端的回呼 URL 取代 redirectUrl。在主控台使用者集區的應用程式用戶端設定索引標籤找到這些值。如需詳細資訊,請參閱登入端點

  2. 以您建立的使用者身分登入您的使用者集區。

  3. 從網址列的 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 授權架構)

AWS 官方
AWS 官方已更新 1 年前