使用AWS Lambda调用AWS API Gateway

5
场景如下:
1. 我有一个 REST API 网关,当触发时会调用一个 Lambda 处理请求并返回响应。 2. 这个 API 端点是公开的。 3. 我有另一个 Lambda 将调用这个 API 网关 / 端点并从中获取响应。
现在的问题是:
1. 我直接像其他 API 一样调用 API 的调用 URL。这样做是正确的吗? 2. 当我把调用 URL 放在浏览器地址栏中时,它会给出“缺少身份验证令牌”的错误提示。 3. 如何实际调用调用 lambda 中的 URL?我指的是在 Node.js 中如何传递令牌?
谢谢。

所以基本上,您就像在使用任何编程语言时一样,调用REST API端点,而不在云外或其他地方吗?为什么我没有想到呢...相反,我一直在考虑是否有一种特殊的AWS方法来实现它... - 10101101
1个回答

5
好的,这些问题相当广泛。我会尽可能多地回答。
首先,你正在遵循的Rest API设计- > Lambda,它被称为“Integration Type”是“Lambda function”,并使用“Use Lambda Proxy integration”。
请查看文档here和示例here 请仔细阅读文档,我相信您将了解此模型的全部内容。在高层次上,该模型API网关通过请求和响应,并且您(Lambda)将处理所有内容。

enter image description here enter image description here

问题1:我直接调用API的调用URL,就像调用任何其他API一样。所以这样做是正确的吗?
答案:这种模式没有问题。是的,您可以像调用任何Rest API一样调用此API(Lambda代理)。
问题2:当我将调用URL放入浏览器地址栏时,它会显示缺少身份验证令牌。
答案:请检查您的API设置。如下图所示,我的API使用Cognito作为授权程序。这意味着消费者在调用API时需要提供“Token”(例如oAuth2)。您可以使用Lambda authorizerCognito authroizer。取决于你自己。如果您不需要任何授权程序,则可以将其设置为NONE,因此您的API不需要身份验证令牌。
简而言之,您现在收到的消息意味着您的API具有“授权人”,但您没有随请求发送令牌。

enter image description here

问题3:如何在调用Lambda时实际调用URL,也就是如何通过Node.js传递令牌? 这很常见。您可以像“在Node.js中使用oAuth2”一样在谷歌上搜索它,它会给您提供大量示例。

https://resources.infosecinstitute.com/securing-web-apis-part-ii-creating-an-api-authenticated-with-oauth-2-in-node-js/

https://stormpath.com/blog/talking-to-oauth2-services-with-nodejs

我希望它有所帮助。如果还有问题或意见,请留言。
谢谢,

关于问题1的答案,当前阶段是测试阶段,我可以看到此阶段的调用URL。当生产阶段被添加时,调用URL会改变吗?如何让程序根据 process.env.ENV 自动决定调用哪个URL。 - Yusuf
关于问题2的答案,API网关中的授权者选项卡为空,并且只有一个“创建授权者”按钮。但是在“API密钥来源”中,选择了标头而不是授权者。 - Yusuf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接