【发布时间】:2019-09-24 00:14:28
【问题描述】:
我已经用 Angular 构建了一个前端应用程序,它使用 AWS ECS 上托管的 API 后端,由 AWS Api Gateway 提供。
所以,这是我的设置:
/user/{userId}/account/{accountId}/dashboard/{proxy+}
是 API Gateway 上的端点
它为 OPTIONS 方法使用 AWS Lambda 代理集成,该方法目前仅检查是否允许源继续进行
GET 方法改为在 方法请求 部分中使用自定义 AWS Lambda 授权方,然后继续使用到 ECS 的 VPC 链接进入 集成请求 部分微服务,最后回到方法响应部分。
目前可能的 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 987654329@?
恕我直言,我认为 API Gateway 具有最复杂的系统来设置错误响应,但除此之外,我设法让它返回 CORS 并返回 401 Unauthorized 错误
更新
我也使用了 http 状态 500,但是通过设置默认网关响应
【问题讨论】:
标签: node.js amazon-web-services cors aws-lambda aws-api-gateway