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 請求的範圍,與您在應用程式用戶端和使用者集區身分驗證請求中授權和請求的範圍不同。

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

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

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

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

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

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

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

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

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

OIDC 是位於 OAuth 2.0 頂端的身分層級,指定由 IdP 向 OIDC 用戶端應用程式 (依賴方) 發出的 JSON 格式 (JWT) 身分字符。請參閱 OIDC IdP 的文件以取得新增 Amazon Cognito 做為 OIDC 依賴方的相關資訊。

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

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

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

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

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

  1. 檢查提供者是否使用下列集合的演算法簽署權杖:RSA、HMAC、Elliptic Curve。

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

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

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

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

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

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