AWS Api Gateway не устанавливает CORS на 204 - PullRequest
1 голос
/ 06 мая 2019

Я создал внешнее приложение с 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, но установив ответ шлюза по умолчанию

1 Ответ

1 голос
/ 09 мая 2019

Итак, после двух дней тестирования я вышел с решением. Я имею в виду, возможно, я что-то неправильно понял в AWS API Gateway, но я увидел, что моя конечная точка фактически ссылалась на канал VPC, который указывал на мой микросервис ECS.

Единственное, что мне нужно было сделать, это обновить микросервис с помощью заголовков ответов CORS, что решило эту проблему

...