【发布时间】: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