【问题标题】:Lambda Cognito User Pool authorizer - can I automatically get the custom user attributes?Lambda Cognito 用户池授权方 - 我可以自动获取自定义用户属性吗?
【发布时间】:2017-07-19 09:29:45
【问题描述】:

我正在使用 Lambda 函数,通过 API Gateway 使用 Cognito 用户池授权器执行。

我知道我可以从event.requestContext.authorizer.claims 获取“标准”用户属性(如subemailcognito:username 等)。

但这不包括自定义用户属性(如custom:myAttribute)。

我知道我可以通过adminGetUser 获取它们,这可行,但我想知道我是否可以保存此调用并以某种方式在event 中自动获取这些自定义属性?

【问题讨论】:

  • 我在我的代理 lambda 中得到 event.requestContext.authorizer.claims,我怎样才能访问 http 代理中的事件或授权对象访问,我想将用户名作为标头发送到我的服务器。请帮忙

标签: aws-lambda aws-sdk aws-api-gateway amazon-cognito


【解决方案1】:

您是否已查看此文档以了解自定义声明? https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-enable-cognito-user-pool.html。 您需要以下列方式为自定义属性定义上下文:

{
    "context" : {
        "role" : "$context.authorizer.claims['custom:myAttribute']"
    }
}

【讨论】:

  • 好的,我假设这意味着我不能使用“Lambda 代理集成”,我需要编写自己的身体映射模板?如果是,是否有一个标准模板可以复制并添加我的自定义属性,以便 Lambda 函数像以前一样工作(即使用“代理集成”)?
  • 嗯,所以我仔细检查了一个使用 Lambda 代理集成的方法(与我上面描述的场景基本没有变化),以及一个使用身体映射模板的方法。事实证明没有区别 - 两者都包含“authorizer.claims”中的自定义属性......所以我之前是盲目的,或者其他东西已经改变了。我会继续关注这个问题,并根据任何新的启示进行更新。
  • 更新:它仍然像魅力一样工作。不知道为什么它以前不起作用。
【解决方案2】:

将自定义属性添加到 Cognito 用户池并为用户分配一个值后,它不会出现在 requestContext.authorizer.claims 集合中的原因有几个。

首先也是最明显的一点是,您需要通过您用来生成身份验证的 ID 令牌的应用客户端使自定义属性可读。如果您使用的是 AWS 控制台,请导航至 App Clients -> Show Details -> Set attribute read and write permissions,然后勾选您希望对您的 Lambda 可见的属性。

即使您已完成第一步,您的属性未出现的第二个原因是用户的声明已编码在您生成的 ID 令牌中。这意味着如果您使用在使属性可读之前创建的 ID 令牌,您仍然不会看到它们。解决方案是为您的用户生成一个新的 ID 令牌,此时您应该会在 Lambda 的请求上下文中看到这些属性。

【讨论】:

  • 就是这样。哇。我花了大约 3-4 天的时间来寻找这个答案。太感谢了。我希望文档更清楚您需要使自定义属性可读。
  • 我遇到了同样的问题,这是因为我发送的令牌是accessToken而不是不包含自定义属性的idToken
猜你喜欢
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
相关资源
最近更新 更多