因此,我通过 AWS Gateway 提供的基本设置启用了 CORS。然而,对于这个 API,我需要允许所有请求的控制源并允许凭据。
这是它的样子
您可能已经猜到的问题是 CORS 不允许此设置,您不能使用 Origin 通配符并将凭据设置为 true。通常,解决此问题的方法是获取请求域并将其添加到 Origin 标头中。这或多或少是我想做的。但我不知道如何获取该信息并将其添加为映射值。 API Gateway 在哪里存储该信息以及如何获取它?
更新:
我必须通过 HTTP 标头主机传递到我的 Lambda 函数(我应该在前面提到过),我已尝试实现下面的答案,但我无法使用提供的说明访问标头以将其传递到 Lambda 函数。如有任何更多帮助,我们将不胜感激。
好吧,经过几个小时的研究并在互联网上查找信息后,我找到了一个解决方案,希望它对其他人有用。
要传递不是 AWS API Gateway 提供的默认值的 HTTP 标头,然后通过 Lambda 函数访问该数据并在响应标头中返回该数据,请按照以下步骤操作
在“方法请求”中,转到“HTTP 请求标头”并添加要捕获的所需标头。 IE。如果我们想获取 API url 的主机值,您可以在此处输入“Host”。如果您想获取调用者的网站主机,请使用“Origin”
在“集成请求”中,如果“application/json”不存在,则转到映射模板并创建一个新模板,如果它只是更新它。
这是重要的部分,请传递您在步骤 1 中设置的标头值。为此,请在模板框中编写类似于以下内容的内容。
{
"origin" : "$input.params().header.Origin",
"host" : "$input.params().header.Host"
}
您还可以传入在同一 JSON 中定义的任何 url 参数。
-
从 Lambda 访问数据,如果使用 Node 作为 Lambda 后端代码,集成请求会将信息传递到“Event”参数中。要检索任何标头的值,只需在处理程序中使用以下内容即可。
event.origin;
-
将响应从 Lambda 发送回 API Gateway 时,最好将响应格式化为 JSON。与此类似的东西。
{
"origin" : event.origin,
"host" : event.host,
"nonHeaderOutput" : "Hello World"
}
在“集成响应”中转到“标头映射”,如果您需要的标头未列出,您可以将其添加到“方法响应”中,然后它将出现在此处。对于此示例,我使用“Access-Control-Allow-Origin”并将映射值编辑为integration.response.body.origin
-
现在转到“映射模板”并选择要使用的内容类型,然后通过将其添加到模板框来编辑模板以访问非标头响应
$input.path("$.nonHeaderOutput")
现在,发送到 API 的标头可以在您的方法 Response 中使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)