我想了解如何获取身份提供者 (IdP) 颁发的访问和身份令牌,我将其集成到 Amazon Cognito 用户池中,用于授权或故障排除。
简短描述
OpenID Connect (OIDC) IdP 身份验证流程不允许用户或应用程序查看 IdP 端令牌。出于授权或故障排除的目的,某些用例需要在应用程序中实际使用 IdP 颁发的令牌。
**重要事项:**以下解决方案假设您已将 OIDC IdP 或社交 IdP 与 Amazon Cognito 用户池进行集成。如果还未将 IdP 与用户池集成,请通过第三方添加用户池登录。
解决方法
在用户池中创建自定义属性
要在用户池中创建自定义属性,请完成以下步骤:
- 打开新的 Amazon Cognito 控制台,然后在您的用户池中选择注册体验选项卡。
- 在自定义属性下,选择添加自定义属性。
- 要创建访问令牌的自定义属性,请输入以下值:
**名称:**access_token
类型: String
最大值: 2,048
**可变:**选中此复选框
- 选择保存。
- 要创建 ID 令牌的自定义属性,请输入以下值:
**名称:**id_token
类型: String
最大值: 2,048
**可变:**选中此复选框
- 选择保存。
配置 Amazon Cognito 和 IdP 之间的属性映射
要配置与 IdP 属性的属性映射,请完成以下步骤:
- 打开新的 Amazon Cognito 控制台,然后在您的用户池中选择登录体验选项卡。
- 在联合身份提供者登录下,从列表中选择您的 IdP。
- 在身份提供者信息部分,选择编辑。确保授权范围中存在以下范围:
**Facebook:**public_profile、电子邮件
**谷歌:**个人资料电子邮件 openid
**使用 Amazon 登录:**profile postal_code
**使用 Apple 登录:**电子邮件名称
**所有其他 OIDC 提供者:**个人资料电子邮件 openid
- 在身份提供者页面上,选择属性映射中的编辑。
- 在用户池属性列中,选择您的自定义属性。
- 从 OpenID Connect 属性列中,选择 access_token 或 id_token。
- 选择保存。
以下是属性映射配置的结果:
- 用户池属性:custom:id_token
- OpenID Connect 属性:id\ _token
- 用户池属性:custom:access_token
- OpenID Connect 属性:access_token
在 Amazon Cognito 应用程序客户端中开启属性读写权限
当用户登录应用程序时,Amazon Cognito 会更新映射的属性。要让 Amazon Cognito 更新映射的用户池属性,映射的属性在应用程序的 App 客户端设置中必须为可写入。要让 Amazon Cognito 更新用户的 ID 令牌,这些属性在应用程序的 App 客户端设置中必须为可读。
要开启读写权限,请完成以下步骤:
- 打开新的 Amazon Cognito 控制台,然后在您的用户池中选择应用程序集成选项卡。
- 选择您的应用程序客户端。
- 在属性读取和写入权限中,选择编辑。
- 在编辑属性读取和写入权限页面上,选中自定义属性的读取和写入复选框。
- 选择保存。
对使用自定义属性的每个应用程序客户端重复这些步骤。
有关更多信息,请参阅“属性权限和范围”。
使用第三方 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"
}
重要事项:
- 所有自定义属性的最大长度为 2048 个字符。当 IdP 令牌超过 2048 个字符时,会出现以下错误: "String attributes cannot have a length of more than 2048".
- 创建自定义属性后,无法移除或修改该属性。
- 如果后续登录时未更新自定义属性,请检查自定义属性的可变性。在创建属性时清除可变复选框后,就可能会出现此问题。要了解更多信息,请参阅自定义属性。
**注意:**如果仍然无法获得 IdP 令牌,请联系您的 IdP。检查 IdP 是否支持将带属性的令牌传递至 Amazon Cognito。然后,联系 AWS Support 进行其他故障排除。
相关信息
如何在 Amazon Cognito 用户池中将 Auth0 设置为 OIDC 提供商?
如何在 Amazon Cognito 用户池中将 LinkedIn 设置为社交身份提供者?
如何在 Amazon Cognito 用户池中将 Okta 设置为 OpenID Connect 身份提供者?
如何在 Amazon Cognito 用户池中将 Google 设置为联合身份提供者?
如何在浏览器中查看 SAML 响应以排查问题