node.js - AWS Api Gateway 未在 204 上设置 CORS
问题描述
我用 Angular 构建了一个前端应用程序,它使用由 AWS Api Gateway 提供的 AWS ECS 上托管的 API 后端。
所以,这是我的设置:
/user/{userId}/account/{accountId}/dashboard/{proxy+}
是 API Gateway 上的端点
它对该方法使用 AWS Lambda代理集成,该OPTIONS
方法目前仅检查是否允许源继续进行
该方法改为在方法请求GET
部分使用自定义 AWS Lambda 授权方,然后继续使用 VPC 链接到 ECS 微服务的集成请求部分,最后返回到方法响应部分。
当前可能的 HTTP 状态代码是:200, 204, 401, 500, 504
并且仅204 and 504
在此处设置(因为我不知道它是否有作用)
这是 Node.js Lambda 授权方相关代码:
const UNAUTHORIZED_STRING = "Unauthorized";
exports.handler = (event, context, callback) => {
/* Preliminar checks here */
const keyRequiresAuth = xApiKeyRequiresAuth(xApiKey);
if (keyRequiresAuth) {
// try validating using cookie
// uses generatePolicy at the end
userAuthentication(cookieValue, event, callback);
} else {
// Validate using x-api-key
const generatedPolicy = generatePolicy(xApiKey, 'Allow', event.methodArn);
callback(null, generatedPolicy);
}
};
const generatePolicy = (principalId, policyEffect, resource) => {
const authResponse = {
principalId: principalId
};
if (policyEffect && resource) {
authResponse.policyDocument = {
Version: '2012-10-17',
Statement: [{
Action: 'execute-api:Invoke',
Effect: policyEffect,
Resource: resource
}]
};
}
return authResponse;
};
假设微服务根本没有设置任何标头,问题是,虽然我通过将它们设置为默认网关响应来使用401
和504
状态代码,但我如何设法返回 CORS 204
?
恕我直言,我认为 API Gateway 具有最复杂的系统来设置错误响应,但除此之外,我设法让它返回带有401 Unauthorized错误的 CORS
更新
我也使用了 http 状态500
,但是通过设置默认网关响应
解决方案
所以,经过两天的测试,我想出了一个解决方案。我的意思是,我可能误解了 AWS API Gateway 内部的某些内容,但我看到我的端点实际上是在引用指向我的 ECS 微服务的 VPC 链接。
我唯一需要做的就是使用 CORS 响应标头更新该微服务,从而解决了这个问题
推荐阅读
- r - R bind_rows() 错误:参数 1 必须有名称
- django - 如何在 Django 中处理文件处理请求?
- ios - 推送时出现大标题导航栏和搜索栏的错误
- azure - Azure Functions 消费计划命名
- python - 在 Windows 10 中安装和运行 Auto-Sklearn
- class - VSCode:搜索类/转到导入库的类
- excel - 设置组合框行源 VBA 返回错误“1004”
- javascript - 我的Step Progress Bar第一步无法激活VUEJS
- java - java中特殊字符(除数字和字母之外的所有字符)的正则表达式是什么
- telerik - 在 ComboBox 上选择对应 ID 时在 TextBox 中显示说明