我正在使用Lambda函数,使用Cognito用户池授权程序通过API网关执行。
我知道我可以从sub
获取“标准”用户属性(例如email
,cognito:username
,event.requestContext.authorizer.claims
等)。
但这不包括自定义用户属性(例如custom:myAttribute
)。
我知道我可以通过adminGetUser获取它们,但是这有效,但我想知道我是否可以保存此调用并以某种方式自动在event
中获取这些自定义属性?
答案 0 :(得分:3)
您是否已针对自定义声明查看此文档? https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-enable-cognito-user-pool.html。 您需要以下列方式为自定义属性定义上下文:
{
"context" : {
"role" : "$context.authorizer.claims['custom:myAttribute']"
}
}
答案 1 :(得分:1)
将自定义属性添加到Cognito用户池并为其分配值后,有几个原因导致它不会出现在requestContext.authorizer.claims
集合中。
第一个也是最明显的一点是,您需要通过您用来生成您要进行身份验证的ID令牌的应用客户端来使自定义属性可读。如果您使用的是AWS控制台,则可以导航到App Clients -> Show Details -> Set attribute read and write permissions
,然后勾选要使Lambda可见的属性。
即使您已完成第一步,您的属性未显示的第二个原因是用户的声明是在您生成的ID令牌中编码的。这意味着如果您在使属性可读之前使用了创建的ID令牌,您仍然无法看到它们。解决方案是为您的用户生成一个新的ID令牌,此时您应该在Lambda的请求上下文中看到属性。