AWS ApiGateway Lambda代理访问授权程序

时间:2017-02-20 16:51:42

标签: amazon-web-services aws-lambda aws-api-gateway amazon-cognito aws-cognito

我在ApiGateway中使用了Lambda代理和Cognito用户池授权程序。在Lambda函数中,我可以通过事件对象访问路径等变量。除此之外,我想访问经过身份验证的用户的声明。在编写的文档中,我应该使用:

context.authorizer.claims.property

但是我的授权人是空的,所以我得到

Cannot read property 'claims' of undefined

有想法的人吗?

2 个答案:

答案 0 :(得分:2)

如果您指的是this part of the documentation$context.authorizer.claims是集成的映射模板的一部分。它与处理程序的context参数无关。

使用Lambda Proxy integration,您正在使用passthrough mapping template。这似乎是什么不包括什么,你正在寻找(见编辑)。您可能必须禁用Lambda Proxy integration并在映射模板中使用类似的内容:

{
    "identity" : {
        "sub" : "$context.authorizer.claims.sub",
        "email" : "$context.authorizer.claims.email"
    }
}

映射模板“构建”Lambda的event参数。因此,您可以通过event参数访问您声明的部分内容。

exports.handler = (event, context, callback) => {
    // TODO implement
    callback(null, event.identity.email);
};

请注意,我稍微修改了文档示例,以避免对context可能存在的另一个混淆:

  • API网关中的映射模板变量
  • Lambda中处理程序的第二个参数
  • 文档的一些示例中的event参数的关键字< =我将其重命名为identity

修改

正如 doorstuck 所指出的,the information is available using the proxy integration

答案 1 :(得分:2)

接受的答案可行,但不需要。使用Lambda代理集成时,您可以访问授权者声明:

event.requestContext.authorizer.claims

您可以尝试console.log(event);并查看从Cl​​oudWatch Logs中的Lambda代理集成中获得的信息。