Я создал внешнее приложение с Angular, которое использует API-интерфейс, размещенный в AWS ECS, предоставляемый AWS Api Gateway.
Итак, это моя установка:
/user/{userId}/account/{accountId}/dashboard/{proxy+}
является конечной точкой на API Gateway
он использует AWS Lambda интеграция прокси для метода OPTIONS
, который в настоящее время только проверяет, разрешено ли начало источника или нет
метод GET
вместо этого использует настраиваемый лямбда-авторизатор AWS в части Запрос метода , затем переходит к части Запрос интеграции с VPC-связью с микросервисом ECS и наконец возвращается к части Response .
В настоящее время возможны коды состояния 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 самая сложная система для установки ответов об ошибках, но, кроме этого, мне удалось позволить ему вернуть CORS с 401 Несанкционированным Ошибка
Обновление
Я сделал это с http статусом 500
, но установив ответ шлюза по умолчанию