Как ПОСТАВИТЬ информацию для входа в API Gateway для получения объекта из S3 - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь получить аутентификацию, когда Cognito работает для статического веб-сайта S3.

Я создал страницу входа в отдельную корзину, в которой есть форма для ввода имени пользователя / пароля.Как только это передается, он аутентифицируется с использованием Cognito и, в случае успеха, отправляет запрос POST в API Gateway с полученным токеном в заголовке авторизации.

Вот соответствующий код:

$(function onDocReady() {
    $('#signinForm').submit(handleSignin);
});

function handleSignin(event) {
    var username = $('#usernameInputSignin').val();
    var password = $('#passwordInputSignin').val();
    event.preventDefault();
    signin(username, password,
        function signinSuccess(result) {
            console.log('Successfully Logged In');
            token = result.getAccessToken().getJwtToken();
            alert('access token: ' + token);
            sendToken(token);
        },
        function signinError(err) {
            alert(err);
        }
    );
}

function sendToken(token) {
    $.ajax({
        type: 'POST',
        url: _config.api.invokeUrl,
        headers: {
            Authorization: token
        },
        success: function(res){
            alert('It worked!');
        },
        error: function () {
            alert('Error stack: ' + (new Error()).stack);
        }
     });
}

Мой API-шлюз настроен как прокси-сервер S3, поэтому ресурсы - это область и имя файла для моей веб-страницы S3.Ресурс bucketname / filename принимает запрос POST и настраивается с помощью авторизатора Cognito для проверки токена.Метод POST связан с запросом интеграции, который должен отправить запрос GET на S3 для захвата веб-страницы.

Однако, когда я проверяю это, я продолжаю получать 405 Method Not Allowed для запроса POST.Сначала я думал, что это проблема CORS, но я настроил API-шлюз для работы с этим, поэтому я не думаю, что это проблема.

Вот что отображается в сетевой консоли (я отредактировал некоторыевещи, чтобы попытаться сократить его):

General:
Request URL: [login-page-URL]
Request Method: POST
Status Code: 405 Method Not Allowed

Response Headers:
Allow: GET, HEAD, OPTIONS
Content-Length: 422
Content-Type: text/html; charset=utf-8
Date: Fri, 25 May 2018 17:29:31 GMT
Server: AmazonS3

Request Headers:
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Authorization: [my-token]
Connection: keep-alive
Content-Length: 0
Host: [login-page-URL]
Origin: [login-page-URL]
Referer: [login-page-URL]
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
X-Requested-With: XMLHttpRequest

Итак, мне кажется, что источник запроса на мою веб-страницу S3 исходит от моей страницы входа.Разве это не должно исходить от шлюза API?

И почему POST к шлюзу API приводит к запросу POST для веб-страницы S3?Как я могу заставить POST к моему API-шлюзу привести к GET от S3, чтобы получить мою статическую веб-страницу?Если я настрою запрос на интеграцию для моего запроса POST, чтобы отправить запрос GET на мою веб-страницу S3, разве это не сработает?

Я очень незнаком с JavaScript и API Gateway, поэтому я не уверенесли это проблема с моим кодом, или с конфигурацией шлюза API, или с обоими.Я ценю помощь!

РЕДАКТИРОВАТЬ: Вот скриншот того, что я настроил на API Gateway: API Gateway configuration

У меня также есть методы GET дляресурсы, чтобы проверить работоспособность API Gateway (и те работали нормально).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...