將身分提供者與 Amazon Cognito 整合後,如何取得 OIDC 或社交身分供應商核發的字符?

3 分的閱讀內容
0

我想要取得與 Amazon Cognito 使用者集區整合的身分提供者 (IdP) 所核發的存取和 ID 字符。

簡短描述

OpenID Connect (OIDC) IdP 身分驗證流程中,Amazon Cognito 將 IDP 核發的授權碼與 IdP 字符交換。然後,Amazon Cognito 會準備自己的一組字符,並在成功聯合後將它們傳回最終使用者。但是,此過程不允許使用者或應用程式檢視實際的 IdP 端字符。某些使用案例可能需要應用程式中實際的 IDP 核發字符以進行授權或疑難排解。若要在聯合到 Amazon Cognito 使用者集區時擷取和存放 IdP 核發的存取和 ID 字符,請按照「解決方案」一節中的步驟進行操作。

**重要提示:**本文中的步驟假設您已將 OIDC IdP 或社交 IdP 與 Amazon Cognito 使用者集區整合。如果您未將 IdP 與使用者集區整合,請遵循透過第三方新增使用者集區登入的步驟。

解決方案

在使用者集區中建立自訂屬性

請依照下列步驟在您的使用者集區中建立自訂屬性:

1.    開啟新的 Amazon Cognito 主控台,然後選擇使用者集區中的 Sign-up Experience (註冊體驗) 索引標籤。

2.    在 Custom Attributes (自訂屬性) 區段下,選取 Add custom attributes (新增自訂屬性) 按鈕。

3.    若要建立存取字符的自訂屬性,請輸入下列值,然後儲存變更。

  • Name (名稱):access_token
  • Type (類型):字串
  • Max (最大值):2,048
  • Mutable (可變):選取此核取方塊

4.    若要為 ID Token 建立自訂屬性,請輸入下列值,然後儲存變更。

  • Name (名稱):id_token
  • Type (類型):字串
  • Max (最大值):2,048
  • Mutable (可變):選取此核取方塊

在 Amazon Cognito 和您的 IdP 之間設定屬性對應

請遵循下列步驟來設定與 IdP 屬性的屬性對應:

1.    開啟新的 Amazon Cognito 主控台,然後選擇使用者集區中的 Sign-in Experience (登入體驗) 索引標籤。

2.    在 Federated Identity Provider sign-in (聯合身分提供者登入) 區段下,從清單中選取您的 IdP。

3.    選擇 Identity provider information (身分提供者資訊) 區段附近的 Edit (編輯) 選項。確保 Authorized scopes (授權範圍) 區段中存在以下範圍:

  • Facebook 範例範圍:public_profile、電子郵件
  • Google 範例範圍:設定檔電子郵件 openid
  • Login with Amazon (使用 Amazon 登入) 範例範圍:設定檔 postal_code
  • Sign in with Apple (使用 Apple 登入) 範例範圍:電子郵件名稱
  • All other OIDC providers (所有其他 OIDC 提供者) 範例範圍:設定檔電子郵件 openid

4.    返回 Identity provider (身分提供者) 頁面。在 Attribute mapping (屬性對應) 區段旁選擇 Edit (編輯)。

5.    從 User pool attribute (使用者集區屬性) 欄中,選取您在開始時建立的自訂屬性。

6.    從 OpenID Connect attribute (OpenID 連線屬性) 欄中,選取 access_tokenid_token,具體取決於要對應的字符類型。然後,儲存您的變更。

設定屬性對應的範例結果:

User pool attribute (使用者集區屬性):自訂:id_token
OpenID Connect attribute (OpenID 連線屬性):id_token

User pool attribute (使用者集區屬性):自訂:access_token
OpenID Connect attribute (OpenID 連線屬性):access_token

在 Amazon Cognito 應用程式用戶端中開啟屬性讀取和寫入許可

當使用者登入應用程式時,Amazon Cognito 會更新對應的屬性。若要讓 Amazon Cognito 更新對應的使用者集區屬性,對應的屬性必須在應用程式的應用程式用戶端設定中可寫入。若要讓 Amazon Cognito 更新使用者的 ID 字符,這些屬性必須在應用程式的應用程式用戶端設定中可讀取。

1.    開啟新的 Amazon Cognito 主控台,然後選擇使用者集區中的 App integration (應用程式整合) 索引標籤。

2.    從應用程式用戶端清單中選取您的應用程式用戶端。

3.    在 Attribute read and write permissions (屬性讀取和寫入許可) 區段中,選擇 Edit (編輯)。

4.    在 Edit attribute read and write permissions (編輯屬性讀取和寫入許可) 頁面上,選取自訂屬性的 read (讀取) 和 write (寫入) 核取方塊。

5.    儲存變更。

針對使用自訂屬性的每個應用程式用戶端重複這些步驟。

如需詳細資訊,請參閱使用者集區屬性並前往 Attribute permissions and scopes (屬性許可與範圍) 索引標籤。

使用第三方 OIDC 提供者或社交 IdP 登入

當您透過 Amazon Cognito 託管使用者介面執行新的 IdP 身分驗證時,可以在自訂屬性中看到 IdP 字符。選擇適當的使用者以檢視其屬性中的 IdP 字符。解碼 ID 字符還可提供包含 IdP 字符的自訂屬性。

核發給最終使用者的 ID 字符的承載範例區段:

{
    "custom:access_token": "ya29.a0AeTM1ic9iv_FqpDQeIN......w1OPKdFEbR_Tea",
    "iss": "https://cognito-idp.example_region.amazonaws.com/example_user_pool_id",
    "custom:id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjhjMjdkYjRkMTN............saDMuZ29vZ2xldXNlcmNv"
}

建立自訂屬性時,請記住以下幾點:

  • 任何自訂屬性的最大長度為 2,048 個字元。當 IdP 字符超過 2,048 個字元時,您會收到下列錯誤訊息:"String attributes cannot have a length of more than 2048" (字串屬性的長度不能超過 2048)。
  • 建立自訂屬性後,您無法移除或修改該屬性。
  • 如果後續登入中未更新自訂屬性,請檢查自訂屬性的可變性。當您在建立屬性時清除 Mutable (可變) 核取方塊之後,預期會發生此問題。若要進一步了解,請參閱使用者集區屬性並前往 Custom attributes (自訂屬性) 索引標籤。

**備註:**如果在執行上述步驟後仍然無法取得 IdP 字符,請聯絡您的 IdP。詢問 IdP 是否支援將屬性內的字符傳遞給 Amazon Cognito。確認後,您可以聯絡 AWS Support 以進行其他疑難排解。


相關資訊

如何在 Amazon Cognito 使用者集區中將 Auth0 設定為 OIDC 提供者?

如何將 LinkedIn 設定為 Amazon Cognito 使用者集區中的社交身分提供者?

如何將 Okta 設定為 Amazon Cognito 使用者集區中的 OpenID Connect 身分提供者?

如何將 Google 設定為 Amazon Cognito 使用者集區中的聯合身分提供者?

AWS 官方
AWS 官方已更新 1 年前