【问题标题】:Calling AWS API Gateway from distant webclient using CORS使用 CORS 从远程 Web 客户端调用 AWS API Gateway
【发布时间】:2017-10-09 07:50:05
【问题描述】:

在 AWS 上,我构建了一个 Lambda 函数,该函数使用 API Gateway 在 Web 上公开。

对 API 的访问由 Amazon Cognito 保护。

我的问题是我无法从托管在 test.mydomain.com 的客户端向此 API 发送请求,即使我在 Cognito 上成功进行了身份验证(因此在请求中发送了所需的令牌标题)。

我在 Web 客户端上用于将请求发送到 API Gateway 端点的代码:

function ajaxPost(url, data, callback) {

var req = new XMLHttpRequest();
req.open("POST", url);

req.addEventListener("load", function () {
    if (req.status >= 200 && req.status < 400) {
        callback(req.responseText);
    } else {
        console.error(req.status + " " + req.statusText + " " + url);
    }
});

req.addEventListener("error", function () {
    console.error("URL " + url + " unreachable.");
});

req.setRequestHeader("Content-Type", "application/json");
req.setRequestHeader("Authorization", data.get("id-token"));

data = JSON.stringify(data);

req.send(data);
}

我通过 AWS 控制台在 API 方法上启用了 CORS,也在我的浏览器上启用了 CORS 进行测试,因此应该允许跨域请求。

编辑

在 API Gateway CORS 配置中添加 Access-Control-Expose-Headers 后, 我从 Chrome 控制台收到的错误消息是:“XMLHttpRequest 无法加载 https://XXXX.execute-api.us-east-1.amazonaws.com/prod/RessourceName。预检响应具有无效的 HTTP 状态代码 401”,我可以看到 "x-amzn-errortype: OPTIONS 响应标头中的 UnauthorizedException"

现在已经有几天了,在查看了每个 API Gateway 教程和配置之后,我仍然被卡住了......任何帮助将不胜感激,非常感谢!

【问题讨论】:

  • OPTIONS 请求是否从 curl 工作?例如curl -v -X OPTIONS https://...
  • 我收到了来自 Curl 的相同“401 / 未经授权”响应...谢谢!

标签: http amazon-web-services aws-api-gateway


【解决方案1】:

解决了!

显然,AWS 中会存在一个错误,即在部署 API 之后启用/编辑 CORS 将无济于事。

在此处查看 SO 回复:https://stackoverflow.com/a/40733680/7717871

我尝试从 AWS 控制台创建一个新 API,在流程一开始就启用 CORS,然后部署新创建的 API:它成功了。

【讨论】:

    猜你喜欢
    • 2018-02-15
    • 1970-01-01
    • 2014-04-04
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多