缺少联合 Google 用户的 userAttributes
Missing userAttributes for federated Google User
我正在尝试将 Google 作为 IdP 集成到我们现有的 Cognito 用户池中。到目前为止一切都已设置,我可以 SignUp/SignIn 使用 Google 创建新用户。我正在使用 PreSignUp Lambda 触发器 Link 现有用户或创建一个新的本地用户(如果没有现有用户)。现在我期望 event.Request.UserAttributes['name']
包含 Google 提供的用户名,或者至少看到 id_token
中的属性。但我认为目前不可能获得这些价值。我们开始使用 Cognito 只是作为 username/password 的商店,并且 none 的 userAttributes 被填充或标记为必需。
我已设置 Google 与以下范围的集成:
.../auth/userinfo.email
.../auth/userinfo.profile
openid
在我的 UserPoolClient 中:
- 标记
name
为可读写属性(以及其他属性)
- 检查了以下允许的 OAuth 范围
email
、openid
和 profile
。这些也在负责 OAuth 流程的 Web 客户端中定义。
在联合部分,我配置了属性映射:
Testwise,我将 name
属性映射到我用来测试东西的自定义属性。但是这和 name
到 name
的映射都不起作用。
我在活动中获得的有效载荷:
{{PreSignUp_ExternalProvider .... Google_11...} {map[cognito:email_alias: cognito:phone_number_alias: email:m...@...m email_verified:true] map[] map[]} {false false false}}
id_token
内容:
{
"at_hash": "..",
"sub": "52...",
"email_verified": true,
"iss": "https://cognito-idp.us-west-2.amazonaws.com/...",
"cognito:username": "52..",
"origin_jti": "..",
"aud": "...",
"identities": [
{
"userId": "11...",
"providerName": "Google",
"providerType": "Google",
"issuer": null,
"primary": "false",
"dateCreated": "1648828708886"
}
],
"token_use": "id",
"auth_time": 1648828717,
"exp": 1648830828,
"iat": 1648830228,
"jti": "...",
"email": "m...@...m"
}
access_token
内容:
{
"origin_jti": "02...",
"sub": "52...",
"token_use": "access",
"scope": "openid profile",
"auth_time": 1648828717,
"iss": "https://cognito-idp.us-west-2.amazonaws.com/....",
"exp": 1648829317,
"iat": 1648828717,
"version": 2,
"jti": "..",
"client_id": "...",
"username": "52..."
}
现在可以正常使用了,尽管我无法说明错误。我再次重新创建了整个测试集并确保以下值正确:
- 属性映射
- 授权范围
- 允许的 OAuth 范围
- 前端选择的范围
为了确定,我添加了范围 email
、profile
和 openid
,现在我在预注册触发器 lambda 和ID-Token.
我正在尝试将 Google 作为 IdP 集成到我们现有的 Cognito 用户池中。到目前为止一切都已设置,我可以 SignUp/SignIn 使用 Google 创建新用户。我正在使用 PreSignUp Lambda 触发器 Link 现有用户或创建一个新的本地用户(如果没有现有用户)。现在我期望 event.Request.UserAttributes['name']
包含 Google 提供的用户名,或者至少看到 id_token
中的属性。但我认为目前不可能获得这些价值。我们开始使用 Cognito 只是作为 username/password 的商店,并且 none 的 userAttributes 被填充或标记为必需。
我已设置 Google 与以下范围的集成:
.../auth/userinfo.email
.../auth/userinfo.profile
openid
在我的 UserPoolClient 中:
- 标记
name
为可读写属性(以及其他属性) - 检查了以下允许的 OAuth 范围
email
、openid
和profile
。这些也在负责 OAuth 流程的 Web 客户端中定义。
在联合部分,我配置了属性映射:
Testwise,我将 name
属性映射到我用来测试东西的自定义属性。但是这和 name
到 name
的映射都不起作用。
我在活动中获得的有效载荷:
{{PreSignUp_ExternalProvider .... Google_11...} {map[cognito:email_alias: cognito:phone_number_alias: email:m...@...m email_verified:true] map[] map[]} {false false false}}
id_token
内容:
{
"at_hash": "..",
"sub": "52...",
"email_verified": true,
"iss": "https://cognito-idp.us-west-2.amazonaws.com/...",
"cognito:username": "52..",
"origin_jti": "..",
"aud": "...",
"identities": [
{
"userId": "11...",
"providerName": "Google",
"providerType": "Google",
"issuer": null,
"primary": "false",
"dateCreated": "1648828708886"
}
],
"token_use": "id",
"auth_time": 1648828717,
"exp": 1648830828,
"iat": 1648830228,
"jti": "...",
"email": "m...@...m"
}
access_token
内容:
{
"origin_jti": "02...",
"sub": "52...",
"token_use": "access",
"scope": "openid profile",
"auth_time": 1648828717,
"iss": "https://cognito-idp.us-west-2.amazonaws.com/....",
"exp": 1648829317,
"iat": 1648828717,
"version": 2,
"jti": "..",
"client_id": "...",
"username": "52..."
}
现在可以正常使用了,尽管我无法说明错误。我再次重新创建了整个测试集并确保以下值正确:
- 属性映射
- 授权范围
- 允许的 OAuth 范围
- 前端选择的范围
为了确定,我添加了范围 email
、profile
和 openid
,现在我在预注册触发器 lambda 和ID-Token.