身份驗證如何與 Amazon Cognito 使用者集區和身分集區搭配使用 - Amazon Cognito

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

身份驗證如何與 Amazon Cognito 使用者集區和身分集區搭配使用

當您的客戶登入 Amazon Cognito 使用者集區時,您的應用程式會收到JSON網頁權杖 (JWTs)。

當您的客戶使用使用者集區權杖或其他提供者登入身分集區時,您的應用程式會收到臨時 AWS 認證。

透過使用者集區登入,您可以使用 AWS SDK. 如果您不想建立自己的使用者介面 (UI) 元件,可以叫用預先建置的 Web UI (託管 UI) 或第三方身分識別提供者 (IdP) 的登入頁面。

本主題概述您的應用程式可與 Amazon Cognito 互動以使用 ID 權杖進行驗證、使用存取權杖授權,以及使用身分集區登入資料進行存取 AWS 服務 的一些方式。

使用者集區API驗證和授權 AWS SDK

AWS 已經在各種開發人員框架中為 Amazon Cognito 使用者集區或 Amazon Cognito 身分供應商開發了元件。這些內建的方法會SDKs呼叫 Amazon Cognito 使用者集區API。相同的使用者集區API命名空間具有設定使用者集區和使用者驗證的作業。如需更全面的概觀,請參閱使用 Amazon Cognito 使用者集區 API 和使用者集區端點

API身份驗證適合您的應用程序具有現有 UI 組件,並且主要依賴用戶池作為用戶目錄的模型。此設計將 Amazon Cognito 新增為較大應用程式中的元件。它需要編程邏輯來處理複雜的挑戰和響應鏈。

此應用程序不需要實現完整的 OpenID Connect(OIDC)依賴方實現。相反,它具有解碼和使用的能力JWTs。當您想要存取本機使用者的完整使用者集區功能時,請SDK在開發環境中使用 Amazon Cognito 建立身份驗證。

API使用自定義OAuth範圍的身份驗證不那麼面向外部API授權。要從API身份驗證將自定義範圍添加到訪問令牌,請在運行時使用產生權杖前 Lambda 觸發程序.

下圖說明API驗證的典型登入工作階段。

顯示應用程式的流程圖,該應用程式會提示使用者輸入並使用. AWS SDK
API認證流程
  1. 使用者存取您的應用程式。

  2. 他們選擇一個「登錄」鏈接。

  3. 他們輸入他們的用戶名和密碼。

  4. 應用程式會叫用發出InitiateAuthAPI要求的方法。要求會將使用者的認證傳送至使用者集區。

  5. 使用者集區會驗證使用者的認證,並判斷使用者是否已啟動多重要素驗證 () MFA。

  6. 使用者集區會回應要求程MFA式碼的挑戰。

  7. 應用程式會產生從使用者收集程式MFA碼的提示。

  8. 應用程式會叫用發出RespondToAuthChallengeAPI要求的方法。要求會傳遞使用者的MFA程式碼。

  9. 使用者集區會驗證使用者的MFA程式碼。

  10. 使用者集區會以使用者的回應JWTs。

  11. 該應用程序解碼,驗證,並存儲或緩存用戶的。JWTs

  12. 應用程式會顯示要求的存取控制元件。

  13. 使用者檢視其內容。

  14. 稍後,用戶的訪問令牌已過期,並請求查看訪問控制的組件。

  15. 應用程式會判斷使用者的工作階段應該持續存在。它使用刷新令牌再次調用該InitiateAuth方法並檢索新令牌。

變體和自訂

您可以通過其他挑戰來擴大此流程-例如,您自己的自定義身份驗證挑戰。您可以針對密碼遭到入侵的使用者自動限制存取,或其未預期登入特性可能表示惡意登入嘗試的使用者。對於註冊,更新用戶屬性和重置密碼的操作,此流程看起來大致相同。大多數這些流程都具有重複的公用(客戶端)和機密(服務器端)API操作。

使用託管 UI 進行使用者集區驗證

託管用戶界面是鏈接到您的用戶池和應用程序客戶端的網站。它可以為您的用戶執行登錄,註冊和密碼重置操作。具有用於驗證的託管 UI 組件的應用程序可能需要較少的開發人員的工作來實現。應用程序可以跳過 UI 組件進行身份驗證,並在用戶的瀏覽器中調用託管的 UI。

應用程式收集JWTs具有 Web 或應用程式重新導向位置的使用 實作託管 UI 的應用程式可以連線到使用者集區進行驗證,就像是 OpenID Connect (OIDC) IdP 一樣。

託管 UI 身份驗證適合應用程序需要授權服務器但不需要自定義身份驗證,身份池集成或用戶屬性自助服務等功能的模型。當您想要使用其中一些進階選項時,可以使用SDK.

主要依賴OIDC實施的託管 UI 和第三方 IdP 身份驗證模型最適合具有 OAuth 2.0 範圍的高級授權模型。

下圖說明託管 UI 驗證的典型登入工作階段。

顯示提示使用者輸入並使用託管 UI 登入的應用程式的流程圖。
託管 UI 身份驗證流程
  1. 使用者存取您的應用程式。

  2. 他們選擇一個「登錄」鏈接。

  3. 應用程式會將使用者導向至託管的 UI 登入提示。

  4. 他們輸入他們的用戶名和密碼。

  5. 使用者集區會驗證使用者的認證,並判斷使用者是否已啟動多重要素驗證 () MFA。

  6. 託管 UI 會提示使用者輸入MFA代碼。

  7. 使用者輸入他們的MFA程式碼。

  8. 託管 UI 將用戶重定向到應用程序。

  9. 該應用程序從託管 UI 附加到回調的URL請求參數中收集授權代碼URL。

  10. 應用程序請求帶有授權代碼的令牌。

  11. 令牌端點返回JWTs到應用程序。

  12. 該應用程序解碼,驗證,並存儲或緩存用戶的。JWTs

  13. 應用程式會顯示要求的存取控制元件。

  14. 使用者檢視其內容。

  15. 稍後,用戶的訪問令牌已過期,並請求查看訪問控制的組件。

  16. 應用程式會判斷使用者的工作階段應該持續存在。它使用刷新令牌從令牌端點請求新令牌。

變體和自訂

您可以CSS在任何應用程序客戶端中自定義託管 UI 的外觀和感覺。您也可以使用自己的身分識別提供者、範圍、使用者屬性的存取權和進階安全性設定來設定應用程式用戶端。

使用第三方身分識別提供者進行使用者

使用外部身分識別提供者 (IdP) 或聯合驗證登入與託管 UI 類似的模型。您的應用程式是使用者集區的OIDC信賴方,而您的使用者集區則是 IdP 的傳遞。IdP 可以是消費者使用者目錄,如臉書或谷歌,或者它可以是 SAML 2.0 或OIDC企業目錄,如 Azure。

您的應用程式會叫用使用者集區授權伺服器上的重新導向端點,而不是使用者瀏覽器中的託管 UI。從用戶的視圖中,他們選擇應用程序中的登錄按鈕。然後他們的 IdP 會提示他們登入。就像託管的 UI 身份驗證一樣,應用程序會JWTs在應用程序中的重定向位置收集。

使用第三方 IdP 進行驗證適合使用者在註冊應用程式時可能不想要提供新密碼的模型。協力廠商驗證可以輕鬆新增至實作託管 UI 驗證的應用程式。實際上,託管的 UI 和協力廠商會根據您在使用者瀏覽器中呼叫的細微差異, IdPs 產生一致的驗證結果。

與託管的 UI 身份驗證一樣,聯合身份驗證最適合具有 OAuth 2.0 範圍的高級授權模型。

下圖說明聯合驗證的典型登入工作階段。

顯示提示使用者輸入並使用第三方 IdP 登入的應用程式的流程圖。
聯合身份驗證流程
  1. 使用者存取您的應用程式。

  2. 他們選擇一個「登錄」鏈接。

  3. 應用程式會將使用者引導至具有 IdP 的登入提示。

  4. 他們輸入他們的用戶名和密碼。

  5. IdP 會驗證使用者的認證,並判斷使用者是否已啟動多重要素驗證 ()。MFA

  6. IdP 會提示使用者輸入代MFA碼。

  7. 使用者輸入他們的MFA程式碼。

  8. IdP 會使用SAML回應或授權碼將使用者重新導向至使用者集區。

  9. 如果使用者傳遞授權碼,則使用者集區會以無訊息方式交換 IdP 權杖的程式碼。使用者集區驗證 IdP 權杖,並使用新的授權碼將使用者重新導向至應用程式。

  10. 應用程式會從使用者集區附加至回呼的 URL request 參數收集授權碼URL。

  11. 應用程序請求帶有授權代碼的令牌。

  12. 令牌端點返回JWTs到應用程序。

  13. 該應用程序解碼,驗證,並存儲或緩存用戶的。JWTs

  14. 應用程式會顯示要求的存取控制元件。

  15. 使用者檢視其內容。

  16. 稍後,用戶的訪問令牌已過期,並請求查看訪問控制的組件。

  17. 應用程式會判斷使用者的工作階段應該持續存在。它使用刷新令牌從令牌端點請求新令牌。

變體和自訂

您可以在託管 UI 中啟動聯合身份驗證,用戶可以從分配給應用程序客戶端 IdPs 的列表中進行選擇。託管 UI 還可以提示輸入電子郵件地址,並自動將用戶的請求路由到相應的 SAML IdP。使用第三方身分識別提供者進行驗證不需要使用者與託管 UI 互動。您的應用程式可以將要求參數新增至使用者的授權伺服器要求,並導致使用者以無訊息方式重新導向至其 IdP 登入頁面。

身分集區驗證

識別集區是應用程式的元件,與函式、API命名空間和SDK模型中的使用者集區不同。當使用者集區提供權杖型驗證和授權時,身分集區會提供 AWS Identity and Access Management () IAM 的授權。

您可以將一組指派 IdPs 給身分集區,並使用它們登入使用者。使用者集區與身分集區緊密整合, IdPs 並為身分集區提供存取控制的最多選項。同時,身分集區有多種驗證選項可供選擇。使用者集區加入SAML、社交OIDC、開發人員和訪客身分識別來源,做為從身分集區到臨時 AWS 登入資料的路由。

身分識別集區的驗證是外部的 — 它遵循先前說明的其中一個使用者集區流程,或是您使用另一個 IdP 獨立開發的流程。在您的應用程式執行初始驗證之後,它會將證明傳遞至身分集區,並接收暫時工作階段作為回報。

使用身分集區進行驗證適合您透過IAM授權對應用程式資產和資料強制執行存取控制的 AWS 服務 模型。就像在用戶池中進行API身份驗證一樣,成功的應用程序包含 AWS SDKs您要訪問的每個服務以使用者利益。 AWS SDKs將身分集區驗證的認證作為簽名套用至API要求。

下圖說明使用 IdP 進行身分集區驗證的典型登入工作階段。

顯示提示使用者輸入並使用第三方 IdP 登入的應用程式的流程圖。
聯合身份驗證流程
  1. 使用者存取您的應用程式。

  2. 他們選擇一個「登錄」鏈接。

  3. 應用程式會將使用者引導至具有 IdP 的登入提示。

  4. 他們輸入他們的用戶名和密碼。

  5. IdP 會驗證使用者的認證。

  6. IdP 會使用回應或授權碼將使用者重新導向至SAML應用程式。

  7. 如果用戶傳遞了授權碼,則應用程序將代碼交換為 IdP 令牌。

  8. 應用程序解碼,驗證,並存儲或緩存用戶的JWTs或斷言。

  9. 應用程式會叫用發出GetIdAPI要求的方法。它傳遞用戶的令牌或斷言,並請求一個身份 ID。

  10. 身分集區會針對已設定的身分識別提供者驗證 Token 或宣告。

  11. 身分集區會傳回身分識別碼。

  12. 應用程式會叫用發出GetCredentialsForIdentityAPI要求的方法。它通過用戶的令牌或斷言並請求IAM角色。

  13. 身分集區會產生一個新的JWT。新JWT包含要求IAM角色的宣告。身分識別集區會根據使用者的要求和 IdP 身分集區組態中的角色選取條件來決定角色。

  14. AWS Security Token Service (AWS STS) 回應來自識別集區的AssumeRoleWithWebIdentity要求。回應包含具有IAM角色之臨時工作階段的API認證。

  15. 應用程式會儲存工作階段認證。

  16. 使用者在應用程式中執行需要存取保護資源的動作。 AWS

  17. 該應用程序將臨時憑據作為簽名應用於所需的API請求 AWS 服務。

  18. IAM評估附加至認證中角色的原則。它將它們與請求進行比較。

  19. 會 AWS 服務 傳回要求的資料。

  20. 應用程式會在使用者介面中呈現資料。

  21. 使用者檢視資料。

變體和自訂

若要使用使用者集區視覺化驗證,請在 [問題權杖/宣告] 步驟之後插入先前的使用者集區概觀之一。開發人員身份驗證用開發人員憑據簽署的請求替換請求身份之前的所有步驟 來賓驗證也會直接跳過要求身分識別,不驗證驗證,並傳回受限存取IAM角色的認證。