設定和使用 Amazon Cognito 託管 UI 和聯合端點 - Amazon Cognito

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

設定和使用 Amazon Cognito 託管 UI 和聯合端點

具有網域的 Amazon Cognito 使用者集區是OAuth符合 2.0 規範的授權伺服器和用於身份驗證的 ready-to-use 託管使用者界面 (UI)。授權伺服器會路由驗證要求、發出和管理 JSON Web Token (JWTs),並提供使用者屬性資訊。託管 UI 是使用者集區中,用於基本註冊、登入、多重要素驗證和密碼重設活動的 Web 介面集合。它也是您與應用程式建立關聯的第三方身分識別提供者 (IdPs) 進行驗證的中心樞紐。當您要進行身分驗證和授權使用者時,您的應用程式可以調用託管 UI 和授權端點。您可以使用自己的徽標和自CSS定義,使託管 UI 用戶體驗適合您的品牌。如需託管 UI 和授權伺服器之元件的詳細資訊,請參閱 使用者集區聯合端點和託管 UI 參考

注意

Amazon Cognito 託管 UI 不支援使用自訂身分驗證挑戰 Lambda 觸發程序進行自訂身分驗證。

使用設置託管 UI AWS Amplify

如果您使用將驗證新增 AWS Amplify 至 Web 或行動應用程式,您可以使用 AWS Amplify 架構中的命令列介面 (CLI) 和程式庫來設定託管 UI。若要將驗證新增至您的應用程式,請 AWS Amplify CLI使用將Auth類別新增至專案。然後,在用戶端程式碼中,您可以使用程式 AWS Amplify 庫透過 Amazon Cognito 使用者集區驗證使用者。

您可以顯示預先建立的託管使用者介面,也可以透過 OAuth 2.0 端點聯合使用者,以重新導向至社交登入供應商 (例如 Facebook、Google、Amazon 或 Apple)。用戶成功與社交提供商進行身份驗證後,根據需要在用戶池中 AWS Amplify 創建一個新用戶,然後將用戶的OIDC令牌提供給您的應用程序。

以下示例顯示如 AWS Amplify 何使用在應用程序中使用社交提供程序設置託管 UI。

使用 Amazon Cognito 主控台設定託管 UI

建立應用程式用戶端
  1. 前往 Amazon Cognito 主控台。如果出現提示,請輸入您的 AWS 認證。

  2. 選擇 User Pools (使用者集區)。

  3. 從清單中選擇現有的使用者集區,或建立使用者集區

  4. 選取 App integration (應用程式整合) 索引標籤。

  5. App clients (應用程式用戶端) 下,選取 Create an app client (建立應用程式用戶端)。

  6. 選取 App type (應用程式類型):Public client (公有用戶端)、Confidential client (機密用戶端),或 Other (其他)。公用用戶端通常從使用者的裝置運作,並使用未經驗證和權杖APIs驗證。機密用戶端通常是從您信任的用戶端密碼和API認證的中央伺服器上的應用程式運作,並使用授權標頭和 AWS Identity and Access Management 認證來簽署要求。對於 Public client (公有用戶端) 或 Confidential client (機密客戶端),如果您的使用案例與預先設定的應用程式用戶端設定不同,則請選取 Other (其他)。

  7. 輸入 App client name (應用程式用戶端名稱)。

  8. 選取您想要在應用程式用戶端中允許的 Authentication flows (身分驗證流程)。

  9. 設定 Authentication flow session duration (身分驗證流程工作階段持續時間)。這是您的使用者必須在工作階段字符到期之前完成每個身分驗證挑戰的時間量。

  10. (選用) 設定權杖過期。

    1. 指定應用程式用戶端的 Refresh token expiration (重新整理權杖過期)。預設值為 30 天。您可以將其變更為 1 小時到 10 年的任何值。

    2. 指定應用程式用戶端的 Access token expiration (存取權杖過期)。預設值為 1 小時。您可以將其變更為 5 分鐘到 24 小時的任何值。

    3. 指定應用程式用戶端的 ID token expiration (ID 權杖過期)。預設值為 1 小時。您可以將其變更為 5 分鐘到 24 小時的任何值。

      重要

      如果您使用託管 UI 並設定小於一小時的權杖生命週期,則使用者可根據目前固定在一小時的其工作階段 Cookie 持續時間,使用權杖。

  11. 選擇 Generate client secret (產生用戶端密碼),讓 Amazon Cognito 為您產生用戶端密碼。用戶端密碼通常與機密用戶端相關聯。

  12. 選擇是否要為此應用程式用戶端 Enable token revocation (啟用權杖撤銷)。這將增加權杖的大小。如需詳細資訊,請參閱撤銷權杖

  13. 選擇是否要為此應用程式用戶端 Prevent error messages that reveal user existence (阻止顯示使用者存在的錯誤訊息)。Amazon Cognito 將回應不存在之使用者的登入請求,並顯示一則通用訊息,指出使用者名稱或密碼不正確。

  14. (選用) 為此應用程式用戶端設定 Attribute read and write permissions (屬性讀取和寫入許可)。您的應用程式用戶端可以擁有讀取和寫入使用者集區屬性結構描述之有限子集的許可。

  15. 選擇建立

  16. 請記下 Client id (用戶端 ID)。這會識別註冊和登入請求中的應用程式用戶端。

設定應用程式。
  1. App integration (應用程式整合) 標籤上,在 App clients (應用程式用戶端) 下選取您的應用程式用戶端。檢閱目前的 Hosted UI (託管 UI) 資訊。

  2. URL在「允許的回呼URL」下新回呼。回調URL是成功登錄後用戶被重定向到的地方。

  3. URL在「允許登出」下新增登URL出。登出URL是您的使用者在登出後被重新導向至的地方。

  4. Identity providers (身分提供者) 清單中新增至少一個列出的選項。

  5. OAuth2.0 授予類型下,選擇授權代碼授予以返回然後交換用戶池令牌的授權碼。由於權杖不會直接向最終使用者公開,因此他們不太可能遭到入侵。但自訂應用程式需由後端交換使用者集區權杖所需的授權程式碼。基於安全理由,我們建議您針對行動應用程式使用授權碼授予流程,以及程式碼 Exchange 的 Proof 金鑰 (PKCE)

  6. OAuth2.0 授權類型下,選取隱含授權,即可讓使用者集區JSON網頁權杖 (JWT) 從 Amazon Cognito 傳回給您。您可以使用此流程,但不提供後端為權杖交換授權程式碼。還可以協助您除錯權杖。

  7. 您可以啟用 Authorization code (授權碼) 和 Implicit code (隱含程式碼),並視需要使用每個授予。如果未選取 Authorization code (授權碼) 或 Implicit code (隱含程式碼),並且您的應用程式用戶端擁有用戶端密碼,則您可以啟用 Client credentials (用戶端憑證) 授予。唯有當您的應用程式需要代表自己,而不是代表使用者請求存取權杖,才選取 Client credentials (用戶端憑證)

  8. 選取您想要為此應用程式用戶端授權的 OpenID Connect scopes (OpenID Connect 範圍)。

  9. 選擇 Save changes (儲存變更)

設定網域
  1. 導覽至 App integration (應用程式整合) 索引標籤尋找使用者集區。

  2. Domain (網域) 旁,選擇 Actions (動作),並選取 Create custom domain (建立自訂網域) 或者 Create Cognito domain (建立 Cognito 網域)。如果您已設定使用者集區網域,請選擇 Delete Cognito domain (刪除 Cognito 網域) 或者 Delete custom domain (刪除自訂網域),然後再建立新的自訂網域。

  3. 輸入可用的網域字首,以與 Cognito domain (Cognito 網域) 搭配使用。如需設定 Custom domain (自訂網域) 的詳細資訊,請參閱將自有網域用於託管 UI

  4. 選擇建立

檢視您的登入頁面

在 Amazon Cognito 主控台中,於 App integration (應用程式整合) 標籤的 App clients and analytics (應用程式用戶端和分析) 下,選取應用程式用戶端組態中的 View Hosted UI (檢視託管 UI) 按鈕。此按鈕會將您導向託管 UI 中的登入頁面,其中包含下列基本參數。

  • 應用程式用戶端 ID

  • 授權碼授與請求

  • 對您為目前應用程式用戶端啟用的所有範圍的請求

  • 當前應用程序客戶端列表URL中的第一個回調

當您要測試託管 UI 的基本功能時,View hosted UI (檢視託管 UI) 按鈕會很有用。您可以URL使用其他和已修改的參數來自訂登入。在大多數情況下,View hosted UI (檢視託管 UI) 連結的自動產生參數不會完全符合您的應用程式需求。在這些情況下,您必須自URL定義應用程序在登錄用戶時調用的內容。如需登入參數機碼和值的詳細資訊,請參閱 使用者集區聯合端點和託管 UI 參考

託管的 UI 登錄網頁使用以下URL格式。此範例透過 response_type=code 參數要求授權碼授予。

https://<your domain>/oauth2/authorize?response_type=code&client_id=<your app client id>&redirect_uri=<your callback url>

您可以從應用程式整合索引標籤擷取您的使用者集區網域字串。在同一個選項卡中,您可以在應用程序客戶端IDs和分析下識別應用程序客戶端,其回調URLs,允許的範圍以及其他配置。

當您使用自訂參數導覽至 /oauth2/authorize 端點,Amazon Cognito 會將您重新導向到 /oauth2/login 端點,或者,如果您有 identity_provideridp_identifier 參數,則會以無提示的方式將您重新導向至 IdP 登入頁面。如需略URL過託管 UI 的範例,請參閱SAMLAmazon Cognito 用戶集區中的會話啟動

隱含授予的託管 UI 請求範例

您可以使用以下內容查看託管的 UI 登錄網頁,以URL獲取隱式代碼授予的位置response_type=token。成功登入後,Amazon Cognito 會將使用者集區權杖傳回至 Web 瀏覽器的網址列。

https://mydomain.us-east-1.amazoncognito.com/authorize?response_type=token&client_id=1example23456789&redirect_uri=https://mydomain.example.com

身份和訪問令牌顯示為附加到您的重定向的參數URL。

以下是來自隱含授予請求的回應範例。

https://mydomain.example.com/#id_token=eyJraaBcDeF1234567890&access_token=eyJraGhIjKlM1112131415&expires_in=3600&token_type=Bearer

Amazon Cognito 使用者集區託管 UI 的相關須知

託管 UI 和確認使用者為管理員

對於使用者集區的本機使用者,當您將使用者集區設定為允許 Cognito 自動傳送訊息以進行驗證和確認時,託管 UI 效果最佳。啟用此設定時,Amazon Cognito 會將包含確認碼的訊息傳送給註冊的使用者。當您確認使用者為使用者集區管理員時,託管 UI 會在註冊後顯示錯誤訊息。在此狀態下,Amazon Cognito 已建立新使用者,但還無法傳送驗證訊息。您仍然可以確認使用者為管理員,但他們可能在遇到錯誤後聯絡您的支援人員。如需管理確認的詳細資訊,請參閱 允許使用者註冊您的應用程式,但以使用者集區管理員身分確認使用者

檢視您對託管 UI 組態的變更

如果未立即顯示託管 UI 頁面的變更,請稍候幾分鐘,然後重新整理頁面。

解碼使用者集區權杖

Amazon Cognito 使用者集區權杖是使用RS256演算法簽署的。您可以使用解碼和驗證使用者集區權杖 AWS Lambda,請參閱開啟 GitHub解碼和驗證 Amazon Cognito JWT 權杖

託管的 UI 和TLS版本

託管的 UI 需要在傳輸過程中加密。Amazon Cognito 提供的使用者集區網域需要最低TLS版本 1.2。自定義域支持,但不需要 1.2 TLS 版本。由於 Amazon Cognito 會管理託管 UI 和授權伺服器端點的組態,因此您無法修改使用者集區網域的TLS需求。

託管的 UI 和CORS策略

Amazon Cognito 託管的使用者介面不支援自訂跨來源資源共用 (CORS) 原始政策。裝載 UI 中的CORS原則會阻止使用者在要求中傳遞驗證參數。而是在應用程序的 Web 前端實施CORS策略。Amazon Cognito 會針對下列OAuth端點的請求傳回一個回Access-Control-Allow-Origin: *應標頭。

託管用戶界面和授權服務器 cookie

Amazon Cognito 使用者集區端點會在使用者的瀏覽器中設定 Cookie。Cookie 符合某些網站未設置第三方 Cookie 的瀏覽器的要求。它們的範圍僅限於您的使用者集區端點,包括下列項目:

  • 每個請求的XSRF-TOKEN餅乾。

  • 重新導向使用者時,工作階段一致性的 csrf-state Cookie。

  • cognito話 cookie,可保留一個小時的成功登錄嘗試。