自定义属性未传递到由 AWS Cognito 创建的 ID_TOKEN

Posted

技术标签:

【中文标题】自定义属性未传递到由 AWS Cognito 创建的 ID_TOKEN【英文标题】:Custom attribute not passed into ID_TOKEN created by AWS Cognito 【发布时间】:2019-06-29 01:22:45 【问题描述】:

用户登录成功后,我无法从 AWS Cognito 返回 ID_TOKEN 中的自定义属性

我尝试过的步骤:

1.创建用户池 2.创建应用客户端并检查自定义属性(customattrib1,customattrib2)

用户池屏幕:

检查应用客户端配置中的自定义属性

3.使用admin-create-user api创建用户

下图显示了用户属性的值:

4.在客户端应用中使用 aws-cognito-auth.js 登录用户。返回的 ID 令牌不包含自定义属性。

ID_TOKEN


  "at_hash": "PKfjYDaiEty5mUOyJZlPQA",
  "sub": "639d5016-2bd3-4c6f-b82d-21ae38071b09",
  "email_verified": true,
  "iss": "https://cognito-idp.ap-south-1.amazonaws.com/ap-south-1_XXXXXXX",
  "phone_number_verified": true,
  "cognito:username": "testuser",
  "aud": "XYXYXYXYX",
  "token_use": "id",
  "auth_time": 1549349674,
  "phone_number": "##########",
  "exp": 1549353274,
  "iat": 1549349674,
  "email": "testuser@somedomain.com"

我已经检查了下面的链接,其中包含有关此问题的一些信息,但到目前为止没有任何帮助。

Adding Cognito custom attributes post pool creation?

Cognito User Pool custom attributes do not show up in the ID token if user pool is configured with a SAML identity provider

Cognito User Pool custom attributes do not show up in the ID token if user pool is configured with a SAML identity provider

https://www.reddit.com/r/aws/comments/a07dwg/cognito_add_custom_attribute_to_jwt_token/

请帮我弄清楚我是否遗漏了什么..

【问题讨论】:

自定义属性只有在被赋值后才会出现。您是否在您创建的自定义属性中添加了价值? @AtharKhan 是的,这些值是在创建用户时提供的,我更新了问题描述以添加显示用户属性值的图像。 您确定用于生成令牌的应用客户端 ID 是您分配了可读/可写权限的那个? @AtharKhan 是的,只有一个应用程序客户端,我已经标记了属性并粘贴了相同的屏幕打印。 【参考方案1】: 在您的 Cognito 用户池中,转到常规设置 -> 应用程序客户端,然后为每个应用程序客户端单击 Show Details,然后单击 Set attribute read and write permissions。选中 Readable Attributes 下属性名称旁边的复选框。 在您的 Cognito 用户池中,转到应用客户端设置 -> 允许的 OAuth 范围并启用 profile 范围。

【讨论】:

一个额外的附加:确保如果您使用托管的 ui url,该 url 包含 profile 作为范围参数的一部分:IE &scope=email%20openid+profile。在应用程序客户端设置中具有此功能是不够的,它还必须包含在托管的 UI 请求参数中,否则它不会将它们作为 jwt 有效负载的一部分返回。 如果有人正在寻找 cdk 解决方案,那么 cognito.UserPoolClient 具有属性 readAttributes。像(new cognito.ClientAttributes()).withCustomAttributes("custom:something") 一样创建它,存在一个错误,即 withCustomAttributes 创建一个新对象而不是附加到它自己的对象。【参考方案2】:

我遇到了同样的问题,在我寻找解决方案时出现了您的问题。

当我在“应用程序客户端设置”中启用 profile 范围时,我的自定义属性开始出现在 ID 令牌中。 (可在:AWS 控制台->“用户池”-> 单击您的池->“应用程序客户端设置”->“允许的 OAuth 范围”)

(顺便说一句:我被documentation 中的这句话误导了:“openid 范围返回客户端可读的 ID 令牌中的所有用户属性”。在我的例子中 openid 范围不够。)

【讨论】:

以上是关于自定义属性未传递到由 AWS Cognito 创建的 ID_TOKEN的主要内容,如果未能解决你的问题,请参考以下文章

如何从 c# 中的 aws cognito 获取用户属性

如何将 AD FS 组成员身份映射到自定义 AWS Cognito 属性?

AWS Cognito:将自定义声明/属性添加到 JWT 访问令牌

自定义Web应用程序中的AWS Cognito社交提供程序

AWS API Gateway 身份验证(Cognito 与自定义授权者)

AWS Cognito 基于 JWT 属性的路由