在AWS上,我构建了一个使用API网关在Web上公开的Lambda函数。
Amazon Cognito保护对API的访问。
我的问题是即使我在Cognito上成功进行身份验证(因此发送了所需的令牌),我也无法从 test.mydomain.com 托管的客户端向此API发送请求请求标题)。
我在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,也在我的浏览器上启用了测试,因此应该允许跨域请求。
修改
在API网关CORS配置中添加Access-Control-Expose-Headers后, 我从Chrome控制台收到的错误消息是:&#34; XMLHttpRequest无法加载https://XXXX.execute-api.us-east-1.amazonaws.com/prod/RessourceName。预检的响应包含无效的HTTP状态代码401&#34; ,我可以在OPTIONS响应标头中看到&#34; x-amzn-errortype:UnauthorizedException&#34; 。
现在已经过了几天,在查看了每个API网关教程和配置之后,我仍然坚持......任何帮助都会受到赞赏,非常感谢!
答案 0 :(得分:0)
解决!
显然,AWS中会出现一个错误,在部署了API 后启用/编辑CORS 将无效。
在此处查看SO响应:https://stackoverflow.com/a/40733680/7717871
我尝试从AWS控制台创建一个新的API,在流程的最初阶段启用CORS,然后部署新创建的API:它工作正常。