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

Lambda Cognito User Pool authorizer - can I automatically get the custom user attributes?

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

我知道我可以从 event.requestContext.authorizer.claims.[= 获取 "standard" 用户属性(如 subemailcognito:username 等)。 17=]

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

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

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

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