【问题标题】:AWS Lambda - Can't get Cognito user data in lambda functionAWS Lambda - 无法在 lambda 函数中获取 Cognito 用户数据
【发布时间】:2018-06-13 17:32:47
【问题描述】:

我正在尝试在 lambda 函数中获取 Cognito 用户数据。我正在尝试使用body mapping template as 将其传递给 lambda

{
    "cognito-authentication-provider" : "$context.identity.cognitoAuthenticationProvider",
    "cognito-authentication-type" : "$context.identity.cognitoAuthenticationType",
    "cognito-identity-id" : "$context.identity.cognitoIdentityId",
    "cognito-identity-pool-id" : "$context.identity.cognitoIdentityPoolId",
}

但是,在 lambda 函数中,数据为空

'cognito-authentication-provider': '',
'cognito-authentication-type': '',
'cognito-identity-id': '',
'cognito-identity-pool-id': ''

请帮我解决这个问题。

谢谢...

编辑: 添加 Cognito 身份验证 dev-dummy-auth

【问题讨论】:

  • 您是否验证了 $context.identity.cognitoAuthenticationProvider 实际上包含您希望它包含的内容?
  • @ThomasVdBerge 实际上,我想知道用户所在的 cognito 用户池组。
  • @KMo 是的。我正在使用 Cognito 用户池授权者。

标签: amazon-web-services aws-api-gateway amazon-cognito


【解决方案1】:

以 Dilip Kola 的回答为基础。对于您使用的授权方法,您尝试访问的上下文变量似乎不存在。

我认为将令牌信息传递给底层 Lambda 服务的唯一方法是将整个令牌向下传递并在 Lambda 中使用适合您所使用语言的库打开它。

您可以通过在您的身体映射模板中添加一行来传递令牌。

{"Authorization" : "$input.params().header.get('Authorization')"}

Cognito ID 令牌采用 JWT(JSON Web 令牌)的形式。 ISS 声明的格式为 https://cognito-idp.{region}.amazonaws.com/{userPoolId}

更新 - 包含有关用户组的信息

Cognito 身份令牌不包含颁发该令牌的用户的用户组。

要限制对某些用户组中的个人进行 API 访问,您必须使用 Cognito 联合身份将身份验证方法更改为 AWS_IAM Authorizer。

另一种方法是使用自定义属性,例如 Cognito 中的角色,将某些用户标记为管理员、用户等(因为这些可以在 id 令牌中传递),然后评估该自定义属性。如果你打算走这条路,我会转向自定义 Lambda 授权方的身份验证方法。这样,您可以在验证令牌的同时检查自定义属性,因此如果用户没有正确的访问权限,请求永远不会到达后端。

【讨论】:

  • @K Mo 谢谢。现在我可以通过令牌获取数据。我想问另一个问题,我想将应用程序对 API 端点的访问权限授予像管理员这样的少数人。因为,在用户池中,如果用户属于管理员组,那么他可以访问 API 端点。这样做的方法是什么?请帮帮我。
  • @SaiUnique 我已经更新了我的答案。我希望这会有所帮助。
  • @K Mo 谢谢。您能否为我提供资源(视频或文档)以遵循和实施相同的内容。我会对我很有帮助。
【解决方案2】:

https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference 您指的是使用 cognito 身份池凭据的 API 请求的上下文变量,当您使用 cognito 用户池授权方时,这些变量将不可用。

【讨论】:

  • 我在cognito user pool authorizer 中创建了组。我想获取特定人的组数据。
猜你喜欢
  • 2018-11-22
  • 2018-07-17
  • 2021-05-06
  • 2017-01-16
  • 1970-01-01
  • 2020-12-12
  • 2020-12-25
  • 1970-01-01
  • 2018-09-13
相关资源
最近更新 更多