自定义属性未传递到由 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的主要内容,如果未能解决你的问题,请参考以下文章
如何将 AD FS 组成员身份映射到自定义 AWS Cognito 属性?
AWS Cognito:将自定义声明/属性添加到 JWT 访问令牌