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

时间:2017-02-28 12:01:27

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

我正在使用Lambda函数,使用Cognito用户池授权程序通过API网关执行。

我知道我可以从sub获取“标准”用户属性(例如emailcognito:usernameevent.requestContext.authorizer.claims等)。

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

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

2 个答案:

答案 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的请求上下文中看到属性。