首页 > 解决方案 > 如何在 AWS Gateway 上为特定内容类型的所有请求实施 JSON Schema 模型?

问题描述

我已成功设置 AWS Gateway 以使用 JSON Schema 验证传入 POST 请求的正文。我太激动了!万岁,我想......当我使用内部 AWS 工具测试功能时......但随后我使用 AJAX 测试了来自网站的带有无效数据的 POST 请求,然后是 CURL 请求,再次使用无效数据 - 并且不会你知道的,他们两个都通过了我的集成并触发了我的 AWS Lambda 函数,这是 JSON Schema 应该阻止的!我已将最新的 API 部署到我的端点,甚至将所有被调用的“Content-Type”标头设置为相同的 JSON Schema AWS 模型。我不知道发生了什么……我如何强制所有请求必须是一种内容类型或返回错误?

提前感谢您提供的任何帮助...

标签: amazon-web-servicesaws-lambdaaws-sdkjsonschema

解决方案


对于那些偶然发现这个问题的人,我的问题的答案。

默认情况下,JQuery 的“.post”方法将 Content-Type 设置为“application/x-www-form-urlencoded”。我在 AWS Gateway 中设置的模型仅适用于“application/json”POST 请求。我假设如果我将“请求验证器”设置为对特定内容类型使用 JSON 模式模型,那么只有我定义的内容类型才允许通过......哦,不,不,不!AWS Gateway 可以方便地让任何其他 Content-Type 未经检查地通过,绕过我的 JSON Schema 模型验证器。其实难以置信。因此,仅强制执行 application/json 的答案是然后移动到“集成请求”并为 application/json 配置主体映射,将“当没有定义模板时(推荐)”选项设置为 true。瞧,问题解决了。

我想补充一下……这不再是问题,但即使通过设置多个 Content-Type 模式,该模型也仅在 AWS Gateway 中的第一个模式上实施。奇怪的行为......也许有人可以帮忙吗?


推荐阅读