Aws lambda Lambda Cognito用户池授权器-我可以自动获取自定义用户属性吗?

Aws lambda Lambda Cognito用户池授权器-我可以自动获取自定义用户属性吗?,aws-lambda,aws-sdk,aws-api-gateway,amazon-cognito,Aws Lambda,Aws Sdk,Aws Api Gateway,Amazon Cognito,我使用的是Lambda函数,通过使用Cognito用户池授权器的API网关执行 我知道我可以从event.requestContext.authorizer.claims获取“标准”用户属性(如sub,email,cognito:username,等等) 但这不包括自定义用户属性(如custom:myAttribute) 我知道我可以通过获取它们,这很有效,但我想知道我是否可以保存此调用,并以某种方式在事件中自动获取这些自定义属性?您是否已经查看了此文档以获取自定义索赔? . 您需要以以下方式为

我使用的是Lambda函数,通过使用Cognito用户池授权器的API网关执行

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

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


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

您是否已经查看了此文档以获取自定义索赔? . 您需要以以下方式为自定义属性定义上下文:

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

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

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


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

好的,我假设这意味着我不能使用“Lambda代理集成”,我需要编写自己的body映射模板?如果是,是否有一个标准模板,我可以复制并添加我的自定义属性,以便Lambda函数的工作方式与以前完全相同(即使用“代理集成”)?嗯,因此我仔细检查了一个使用Lambda代理集成的方法(基本上与我上面描述的场景相同),以及一个使用body映射模板的方法。事实证明没有区别-两者都包含“authorizer.claims”中的自定义属性。。。所以,要么我以前是瞎子,要么其他事情已经改变了。我会继续关注这个问题,并更新任何新的启示。更新:它仍然像一个魅力。不知道为什么它以前不工作。我在代理lambda中获得event.requestContext.authorizer.claims,如何在http代理中获得对事件或授权者对象的访问权限,我想将用户名作为头发送到我的服务器。请帮忙,就是这样。哇!我大概花了3-4天寻找这个答案。非常感谢你。我希望文档更清楚,您需要使自定义属性可读。