AWS ApiGateway Lambda 代理访问授权者

Posted

技术标签:

【中文标题】AWS ApiGateway Lambda 代理访问授权者【英文标题】:AWS ApiGateway Lambda Proxy access Authorizer 【发布时间】:2017-07-10 01:26:50 【问题描述】:

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

context.authorizer.claims.property

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

Cannot read property 'claims' of undefined

有人有想法吗?

【问题讨论】:

【参考方案1】:

接受的答案会起作用,但不是必需的。使用 Lambda 代理集成时,您可以在以下位置访问授权方声明:

event.requestContext.authorizer.claims

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

【讨论】:

很好,当使用 Lambda 代理集成时,“方法请求传递”不包含它。我以为会使用相同的映射模板。【参考方案2】:

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

使用Lambda Proxy integration,您使用的是passthrough mapping template。 I̶t̶̶s̶e̶e̶m̶s̶̶w̶h̶a̶t̶̶i̶t̶̶d̶o̶e̶s̶̶n̶o̶t̶̶i̶n̶c̶l̶u̶d̶e̶̶w̶h̶a̶t̶̶y̶o̶u̶̶a̶r̶e̶̶l̶o̶o̶k̶i̶n̶g̶̶f̶o̶r̶(见编辑)。您可能必须禁用 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 Gateway 中的映射模板变量 Lambda 中处理程序的第二个参数 文档的一些示例中event 参数的键identity

编辑

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

【讨论】:

感谢您的详细回答。当我禁用代理集成时,我将无法访问路径、queryString 等属性? 您也可以通过映射模板来完成。我建议选择“Method Requet passthrough”模板并使用您需要的内容完成它。 有效!谢谢;) @SnowMax @Alexis N-o 看起来工作量很大。您可以使用 Lambda 代理集成访问 event.requestContext.authorizer.claims 中的授权人声明。【参考方案3】:

确保您发送“Identity Token”作为授权标头而不是“Access Token”。

Documentation for Identity Token

例如,我正在使用 Amplify 并通过以下方式获取访问令牌:

userSession.getAccessToken().getJwtToken() // Wrong

而不是

userSession.getIdToken().getJwtToken() // Correct

【讨论】:

以上是关于AWS ApiGateway Lambda 代理访问授权者的主要内容,如果未能解决你的问题,请参考以下文章

使用代理通过 AWS API Gateway 的 Lambda 错误

AWS Lambda,API Gateway 返回 Malformed Lambda 代理响应,502 错误

使用代理集成通过 API Gateway 触发 AWS Lambda

如何调试 AWS Api Gateway 和 Lambda 的“AWS/ApiGateway 5XXError”

使用 AWS Lambda 和 API Gateway NodeJs 的格式错误的 Lambda 代理响应

如何使用 lambda 代理集成来云化 API 网关资源