使用 REST 客户端 POSTMAN 使用 api 密钥调用 AWS api 网关端点
Posted
技术标签:
【中文标题】使用 REST 客户端 POSTMAN 使用 api 密钥调用 AWS api 网关端点【英文标题】:Making calls to AWS api gateway endpoint with api key using rest client POSTMAN 【发布时间】:2015-12-12 12:01:19 【问题描述】:我们正在开发一个移动/网络应用程序,我们使用 aws lambda 和 dynamo db 作为我们的后端。独立的 lambda 函数运行良好。 呼叫正在通过 api 网关路由。我们正在使用 api 密钥来利用它提供的安全功能。 出于某些测试目的,我们正在尝试通过第三方 REST 客户端 POSTMAN 调用 api 端点。
请求是 POST 类型的,但无论我们尝试什么,都会得到
403 ("message": "Missing authentication token.")
附上一张快照以供参考。 (出于安全原因,很少有部分被遮蔽)
-
我们无法找出该行为的根本原因。
如果其他工具也能达到同样的效果,请提出建议。
【问题讨论】:
【参考方案1】:在使用 AWS API Gateway 之后,我陷入了与您一样的陷阱。有两件事会导致臭名昭著的403 ("message": "Missing authentication token.")
消息显示:
-
CloudFront 的主动缓存
我注意到您正在使用 CloudFront 来缓存您的 API 请求/响应。 CloudFront 是一个很棒的工具——如果你问我,它是最好的缓存机制之一——但是在开发过程中缓存内容时,很容易被缓存的错误消息所困扰。这里可能就是这种情况,所以我的建议是从 CloudFront 中删除 API,直到它完全正常工作。
-
忘记重新部署
API Gateway 的主要功能之一是 AWS 处理多个 API 版本的方式。部署后,您可以放心地知道您的 API 端点不会改变——这正是您想要的 API 端点。
这是由于端点的部署方式造成的。在 AWS 控制台中进行的每项更改都必须部署到特定的部署,以便与实时交互。
例如,如果我将我的 API 部署到“实时”部署并且一切正常,那就太好了。我现在可以继续调整 AWS 控制台中的设置以随着时间的推移改进 API,当我对所做的更改感到满意时,我可以再次部署到另一个 API 部署,这意味着当前 API 用户不必更改他们的交互方法,直到将部署返回到他们正在处理的部署。
您可能遇到的问题是,即使您在 AWS 控制台中进行了大量更改,您可能还没有重新部署到您在 Postman 中测试的部署。
旁注:
在资源编辑器面板中,您可以提供有关此方法的响应类型、它们的标头和内容类型的信息。在这里可以向您的端点提供更有意义的错误消息。
【讨论】:
【参考方案2】:您似乎没有在 URL 中添加资源。 URL 应该是这样的:
https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource
但你的更像
https://my-api-id.execute-api.region-id.amazonaws.com/test
【讨论】:
是的,通常我们都急于测试。但是,如果我们有耐心再读一行,我们就在那里。【参考方案3】:请求不存在的 API 网关路径会返回“消息:缺少身份验证令牌”有效负载。
不幸的是,这很令人困惑。
【讨论】:
如果您使用了错误的 HTTP 方法,例如。 POST 而不是 GET。超级混乱【参考方案4】:就我而言,我支持的方法是POST
,我尝试在浏览器中GET
。我通过在 Postman 中执行 POST
重试,它成功了!
【讨论】:
【参考方案5】:我必须添加一个 API 使用计划,然后将该计划链接到 API 阶段。
似乎这是将密钥链接到 AWS 中的 API 的唯一方法..
【讨论】:
【参考方案6】:在舞台编辑器页面上,有一个带有舞台名称的左侧导航。如果你扩展它,你会得到一个正斜杠;如果你扩展它,你会得到你的资源。如果你扩展你的资源,你会得到你的方法,如果你点击方法,你会得到一个“调用 URL”链接(与上面的相同,但附加了资源)。此调用 URL 链接有效,调用 GET 方法并返回结果。
【讨论】:
【参考方案7】:确保您正在调用已部署的资源。如果不是,您将这个 confusing API error 改为 404
。您可以通过转到已部署的“阶段”来检查资源是否存在。
部署新资源:转到Actions -> Deploy API
为了获得正确的端点, 转到“阶段”并单击您要调用的资源。您会看到链接“调用 URL”
然后就可以直接运行 curl 命令了,
curl --request GET https://88upd88you.execute-api.us-west-2.amazonaws.com/dev/hello
注意:以上dev
是我的艺名。
【讨论】:
以上是关于使用 REST 客户端 POSTMAN 使用 api 密钥调用 AWS api 网关端点的主要内容,如果未能解决你的问题,请参考以下文章
Spring REST / Swagger / Postman - 正在下载损坏/空白文件
如何从 Postman REST 客户端发送 spring csrf 令牌?
如何使用邮递员测试 Django REST 框架登录保护 API?
如何使用 Advanced REST Client 或 Postman 测试 Express/node REST API 后端?