将身份提供商与 Amazon Cognito 集成后,如何获取 OIDC 或社交身份提供商颁发的令牌?

2 分钟阅读
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.    如需为访问令牌创建自定义属性,请输入以下值,然后保存更改。

  • 名称:access_token
  • 类型:String
  • 最大值:2,048
  • 可变:选中此复选框

4.    如需为 ID 令牌创建自定义属性,请输入以下值,然后保存更改。

  • 名称:id_token
  • 类型:String
  • 最大值:2,048
  • 可变:选中此复选框

在 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、电子邮件
  • 谷歌示例范围:个人资料电子邮件 openid
  • 使用亚马逊登录示例范围:profile postal_code
  • 使用 Apple 示例作用域登录:电子邮件名称
  • 所有其他 OIDC 提供商示例范围:个人资料电子邮件 openid

4.    后退一步,进入身份提供商页面。在 Attribute mapping(属性映射)部分附近选择“Edit(编辑)”。

5.    从 User pool attribute(用户群体属性)列中,选择您在开始时创建的自定义属性。

6.    从 OpenID Connect attribute(OpenID Connect 属性)列中,根据要映射的令牌类型,选择 access_tokenid_token。然后保存更改。

配置属性映射的示例结果:

用户群体属性:custom:id_token
openID Connect 属性:id_token

用户群体属性:custom:access_token
openId Connect 属性: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”(字符串属性的长度不能超过 2,048)。
  • 自定义属性一旦创建,便无法移除或修改。
  • 如果后续登录时未更新自定义属性,请检查自定义属性是否可变。在创建属性时清除取消选中 Mutable(可变)复选框,会出现此问题。如需了解更多信息,请参阅用户群体属性并转到 Custom attributes(自定义属性)选项卡。

**注意:**如果您在执行上述步骤后仍无法获取 IdP 令牌,请联系您的 IdP。询问 IdP 是否支持将属性内的令牌传递给 Amazon Cognito。确认后,您可以联系 AWS Support 进行更多故障排除。


相关信息

如何在 Amazon Cognito 用户群体中将 Auth0 设置为 OIDC 提供程序?

如何使用 Amazon Cognito 用户群体将 LinkedIn 设置为社交身份提供商?

如何使用 Amazon Cognito 用户群体将 Okta 设置为 OpenID Connect 身份提供商?

如何在 Amazon Cognito 用户群体中将 Google 设置为联合身份提供商?

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