在 AWS 中,我构建了一个调用 Lambda 函数的 API 网关。用户通过登录到与 Cognito 联合身份池关联的 Cognito 用户池获得访问权限,并且关联的 IAM 角色包含 API 调用权限。API Gateway 方法是一个 POST 请求。
如果我使用用户池作为 API 网关的授权方,我可以通过我的 javascript Web 应用程序中的 ajax 请求成功触发 Lambda 函数 - 但请注意,这会授予池中的每个用户相同的访问权限。我正在尝试为不同的方法创建不同的基于 Cognito 用户组的访问,并且因为在使用 Cognito 用户池作为授权方时我显然无法为每种方法指定不同的用户组,所以我现在正在查看是否可以使用 AWS_IAM 作为保护 API API 授权者。但是,如果我选择 AWS_IAM 作为授权人,我会返回:
请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问。响应具有 HTTP 状态代码 403。
可能是什么问题?如何为这种情况正确设置 CORS,我的 ajax 请求在客户端 javascript 中应该是什么样子?cognito 会为我签名还是我需要对标题做些什么?
当我使用 Cognito 用户池时,我有:
$.ajax({
method: 'POST',
url: _config.api.invokeUrl + '/savesurv',
headers: {
Authorization: authToken
},
data: JSON.stringify(Data),
contentType: 'application/json',
success: callback,//console.log("complete"),
error: function ajaxError(jqXHR, textStatus, errorThrown) {
console.error('Error requesting save: ', textStatus, ', Details: ', errorThrown);
console.error('Response: ', jqXHR.responseText);
alert('An error occured when requesting to save:\n' + jqXHR.responseText);
}
});
这在这种情况下有效,在使用 AWS_IAM 作为 API Gateway 的授权时是否需要更改它?