Я пытаюсь получить аутентификацию, когда 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:
У меня также есть методы GET дляресурсы, чтобы проверить работоспособность API Gateway (и те работали нормально).