【问题标题】:AWS Api Gateway Lambda Integration is not working with api keyAWS Api Gateway Lambda 集成不适用于 api 密钥
【发布时间】:2020-10-05 01:56:10
【问题描述】:

我的带有 Lambda 集成的 API 网关运行良好。但是,当我制作所需的 api 密钥时,它不起作用。 “跨源请求被阻止:相同的源策略不允许在 https://some-aws-api-gateway 读取远程资源。(原因:CORS 标头“Access-Control-Allow-Origin”缺失)。”

一些发现: 没有 api 密钥 X-Api-Key 的 Api 网关适用于 POSTMAN 和浏览器。带有 api 密钥的 API 网关仅适用于 POSTMAN。

我已经检查了多次标题,它们都是应该的。

{
    "Access-Control-Allow-Origin":"*",
    "Access-Control-Allow-Credentials":"true",
    "Access-Control-Allow-Methods":"GET,OPTIONS",
    "Access-Control-Allow-Headers":"Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token",
    "Content-Type":"application/json"
}

我决定做一个实验。我所做的是删除 api 密钥要求并将"Access-Control-Allow-Origin":"*" 更改为"Access-Control-Allow-Origin":"https://example.com/")。现在来自浏览器的请求出现此错误:CORS 标头“Access-Control-Allow-Origin”与预期结果“https://example.com”不匹配。这对我来说只是意味着我在 AWS Api Gateway 中设置的标头是正确的。

到目前为止我所知道的:

  1. "Access-Control-Allow-Origin":"*" 不需要 api 密钥 WORKS
  2. "Access-Control-Allow-Origin":"*" 使用 api 密钥 DOES NOT WORK,错误:“跨源请求被阻止:相同的源策略不允许在 https://some-aws-api-gateway 读取远程资源。(原因: 缺少 CORS 标头“Access-Control-Allow-Origin”)。”
  3. "Access-Control-Allow-Origin":"https://example.com"(或任何不同于来源的域)需要 api 密钥 不工作,错误:与 2 相同
  4. "Access-Control-Allow-Origin":"https://example.com" 没有 api 密钥 不起作用,错误:CORS 标头“Access-Control-Allow-Origin”与“https://example.com”不匹配

如果您注意到,一旦需要 api 密钥(2 和 3),您将收到相同的错误消息。

我的问题是为什么 CORS 在需要 api 密钥 (X-Api-Key) 时失败,但在不需要 api 密钥时通过?这使我相信 Api 网关上的 CORS 标头很好,但是,从浏览器请求验证 api 密钥的身份验证过程是问题所在。为什么需要 Api 密钥上缺少 CORS 标头 Access-Control-Allow-Origin?我想知道 api 键/标头是否需要编码为某种格式或其他东西。

var myHeaders = new Headers();
myHeaders.append("X-Api-Key", apiKey);   

var requestOptions = {
   method: 'GET',
   headers: myHeaders,
   redirect: 'follow',
   mode: 'cors',
   credentials: 'include'
};

fetch("https://some-aws-api-gateway", requestOptions)
    .then(response => response.json())
    .then(result => console.dir(result))
    .catch(error => console.log('error', error));

【问题讨论】:

    标签: cors cross-browser aws-api-gateway api-gateway


    【解决方案1】:

    问题已解决。问题的根源是我需要一个用于 AWS Api Gateway 控制台中的 OPTIONS 方法的 api 密钥。但是,执行实际 CRUD 操作的所有其他方法,例如。 GETPOST必须将“API Key Required”设置为true

    所以在 OPTIONS 方法的方法请求面板中将“API Key Required”设置为false。有关更多信息,您可以查看此 aws 论坛主题here

    【讨论】:

      猜你喜欢
      • 2017-05-01
      • 2017-04-18
      • 2017-01-22
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 2023-02-14
      • 2017-02-08
      相关资源
      最近更新 更多