管理託管 UI 和授權伺服器 - Amazon Cognito

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

管理託管 UI 和授權伺服器

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

注意

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

使用 設定託管 UI AWS Amplify

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

您可以顯示預先建置的託管 UI,也可以透過 2.0 OAuth 端點聯合使用者,將使用者重新導向至社交登入提供者,例如 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. 選擇 Create (建立)。

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

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

  2. 在允許的回呼 (s) 下新增URL回呼URL。回呼URL是使用者成功登入後重新導向到 的地方。

  3. 在允許登出 (s) 下新增URL登出URL。登出URL是您的使用者在登出後重新導向到 的地方。

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

  5. OAuth 2.0 授予類型 下,選取授權碼授予以傳回授權碼,然後交換使用者集區權杖。由於權杖不會直接向最終使用者公開,因此他們不太可能遭到入侵。但自訂應用程式需由後端交換使用者集區權杖所需的授權程式碼。基於安全考量,我們建議您使用授權碼授予流程,以及行動應用程式的程式碼交換 (PKCE) 的驗證金鑰

  6. OAuth 2.0 授予類型 下,選取隱含授予,讓使用者集區 JSON Web 權杖 (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. 選擇 Create (建立)。

檢視您的登入頁面

在 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 登入頁面。如需略過託管 UI URL的範例,請參閱 SAML Amazon 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

託管 UI 和授權伺服器的須知

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

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

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

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

解碼使用者集區權杖

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

託管 UI 和TLS版本

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

託管 UI 和CORS政策

Amazon Cognito 託管 UI 不支援自訂跨來源資源共用 (CORS) 原始伺服器政策。託管 UI 中的CORS政策會防止使用者在請求中傳遞身分驗證參數。相反地,請在應用程式的 Web 前端實作CORS政策。Amazon Cognito 會將請求的Access-Control-Allow-Origin: *回應標頭傳回至下列OAuth端點。

託管 UI 和授權伺服器 Cookie

Amazon Cognito 使用者集區端點會在使用者的瀏覽器中設定 Cookie。Cookie 符合網站未設定第三方 Cookie 之某些瀏覽器的要求。它們僅涵蓋您的使用者集區端點,並包含下列項目:

  • 每個請求的 XSRF-TOKEN Cookie。

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

  • cognito 工作階段 Cookie,可保留成功的登入嘗試一小時。

在 iOS 中,您可以封鎖所有 Cookie。此設定與託管 UI 不相容。若要使用可能啟用此設定的使用者,請使用 將使用者集區身分驗證建置至原生 iOS 應用程式 AWS SDK。在此案例中,您可以建立非 Cookie 型的工作階段儲存體。