OIDC 使用者集區 IdP 身分驗證流程 - Amazon Cognito

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

OIDC 使用者集區 IdP 身分驗證流程

使用 OpenID Connect (OIDC) 登入,您的使用者集區會自動化與身分提供者 (IdP的授權碼登入流程。您的使用者使用其 IdP 完成登入後,Amazon Cognito 會在外部供應商的oauth2/idpresponse端點收集其程式碼。使用產生的存取權杖,您的使用者集區會查詢 IdP userInfo端點以擷取使用者屬性。然後,您的使用者集區會將收到的屬性與您設定的屬性映射規則進行比較,並相應地填入使用者的設定檔和 ID 字符。

您在OIDC提供者組態中請求的 OAuth 2.0 範圍定義 IdP 提供給 Amazon Cognito 的使用者屬性。作為最佳安全實務, 僅請求對應至您要映射至使用者集區的屬性的範圍。例如,如果您的使用者集區請求 openid profile,您會取得所有可能的屬性,但如果您請求openid email phone_number,則只會取得使用者的電子郵件地址和電話號碼。您可以在應用程式用戶端和使用者集區身分驗證請求中OIDC IdPs,將請求的範圍設定為與您授權和請求的範圍不同。

當您的使用者使用 IdP OIDC 登入應用程式時,您的使用者集區會執行下列身分驗證流程。

  1. 您的使用者會進入 Amazon Cognito 內建登入頁面,並提供透過 IdP OIDC 登入的選項,例如 Salesforce。

  2. 您的使用者會重新導向至 OIDC IdP 的authorization端點。

  3. 使用者驗證後,IdP OIDC 會使用授權碼重新導向至 Amazon Cognito。

  4. Amazon Cognito 會使用 OIDC IdP 交換授權碼,以取得存取權杖。

  5. Amazon Cognito 建立或更新您使用者集區中的使用者帳戶。

  6. Amazon Cognito 發出您的應用程式承載權杖,其中可能包括身分、存取和重新整理權杖。

使用者集區 OIDC IdP 身分驗證流程
注意

身分驗證請求若未在 5 分鐘內完成,Amazon Cognito 會將該請求取消,並將使用者重新導向至託管的 UI。此頁面人會顯示「Something went wrong」錯誤訊息。

OIDC 是 2.0 OAuth 之上的身分層,指定由 發行 IdPs 給OIDC用戶端應用程式 (立約方JWT) 的JSON格式化 () 身分字符。如需將 Amazon Cognito 新增為OIDC依賴方的相關資訊,請參閱 OIDC IdP 的文件。

當使用者使用授權碼授予進行驗證時,使用者集區會傳回 ID、存取和重新整理權杖。ID 權杖是身分管理的標準OIDC權杖,而存取權杖是標準 OAuth2.0 權杖。如需使用者集區應用程式用戶端可支援的授予類型詳細資訊,請參閱 授權端點

使用者集區如何處理提供者的宣告 OIDC

當您的使用者透過OIDC第三方供應商完成登入時,Amazon Cognito 託管 UI 會從 IdP 擷取授權碼。您的使用者集區會交換授權碼,以取得您 IdP 的 token 端點的存取和 ID 權杖。您的使用者集區不會將這些權杖傳遞至使用者或應用程式,但會用它們來建置使用者設定檔,且包含自己所屬權杖的宣告中顯示的資料。

Amazon Cognito 不會單獨驗證存取權杖。而是向提供者 userInfo 端點請求使用者屬性資訊,並預期權杖無效時,請求會遭拒。

Amazon Cognito 會透過下列檢查來驗證提供者 ID 權杖:

  1. 檢查提供者是否使用來自下列集的演算法簽署權杖:RSA、HMAC、橢圓曲線。

  2. 如果提供者使用非對稱簽署演算法簽署權杖,請檢查權仗 kid 宣告中的簽署金鑰 ID 是否於提供者 jwks_uri 端點列出。

  3. 根據提供者中繼資料,比較 ID 權杖簽名與預期的簽名。

  4. iss宣告與為 IdP 設定的OIDC發行者進行比較。

  5. 比較 aud 宣告是否與 IdP 上設定的用戶端 ID 相符,或者如果 aud 宣告中有多個值,則比較宣告是否包含設定的用戶端 ID。

  6. 檢查 exp 宣告中的時間戳記是否未早於目前時間。

您的使用者集區會驗證 ID 權杖,然後嘗試向提供者 userInfo 端點提出提供者存取權杖的請求。它會擷取範圍落在授權其讀取的存取權仗內的任何使用者設定檔資訊。接著,您的使用者集區就可以搜尋您在使用者集區中設定的必要使用者屬性。您必須在提供者組態中為必要的屬性建立屬性映射。您的使用者集區會檢查提供者 ID 權杖和 userInfo 回應。您的使用者集區會將符合映射規則的所有宣告,寫入使用者集區使用者設定檔上的使用者屬性中。您的使用者集區會忽略符合映射規則但不是必要,且在提供者的宣告中找不到的屬性。