Попытка доступа к AWS ресурсам с размещенной на веб-странице AWS -Lightsail - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь написать простую веб-страницу, которую я могу использовать для доступа к AWS IoT Data. Веб-сайт размещен на AWS Lightsail. Я успешно создал соответствующие AWS Cognigto UserPool и IdentityPool и использую пользовательский интерфейс Cognigto для входа в систему. Логин работает нормально и вызывает соответствующую веб-страницу после входа в систему. Также кажется, что он возвращает соответствующий id_token. Проблема возникает, когда я пытаюсь настроить AWS .config с возвращенным id_token. После выполнения AWS .config.update я пытаюсь AWS .config.getCredentials и получаю следующую ошибку.

SEC7139: [CORS] Источник 'https://myrhouse.net 'использовал максимальное значение Access-Control-Max-Age' 172800 ', поскольку предоставленное значение превышало это значение для запроса перекрестного источника до' https://cognito-identity.us-east-2.amazonaws.com/ '. HTTP400: BAD REQUEST - Сервер не смог обработать запрос из-за неверного синтаксиса. (XHR) POST - https://cognito-identity.us-east-2.amazonaws.com/

Я предполагаю, что ошибка BAD REQUEST вызвана проблемой [CORS] (т.е. я не могу связаться с сервером Cognito ). Я обеспокоен тем, что экземпляр Lightsail находится в us-east-1, а ресурсы Cognito - в us-east-2. Могу ли я сделать эту работу? Я смотрю не в том месте?

Мой сегмент кода ниже. Я проверил, что все переменные для identityPoolId, idToken и userPoolId являются правильными. Я пытался использовать us-east-2 и us-east-1 в качестве siteRegion, но ни один из них не работал.

AWS.config = new AWS.Config();
console.log("After new AWS.Config call");

var loginMap = {};
loginMap['cognito-idp.us-east-2.amazonaws.com/' + userPoolId] = idToken;

var creds = new AWS.CognitoIdentityCredentials({
        IdentityPoolId : identityPoolId,
        Logins: loginMap
    });

AWS.config.update({
    region: siteRegion,
    credentials: creds
});


AWS.config.getCredentials(function(err) {
  if (err) console.log("Get cred error: ",err, err.stack);
  // credentials not loaded
  else {
    console.log("Access key:", AWS.config.credentials.accessKeyId);
    console.log("Secret access key:", AWS.config.credentials.secretAccessKey);
  }
});

Буду признателен за любую помощь.

ОБНОВЛЕНИЕ: I ' мы пытались переместить AWS UserPool и IdentityPool в домен AWS us-east-1 и получаю ту же ошибку. Единственная документация, которую я могу найти в AWS по CORS, - это как настроить S3 bucket в качестве веб-сервера. Документация по CORS, которую я нашел за пределами AWS, создает у меня впечатление, что я что-то настраиваю на обслуживающей стороне (в данном случае Cognito), а не на стороне клиента (AWS Lightsail). Это верно? Есть ли что-то, что мне нужно настроить на стороне Lightsail?

ОБНОВЛЕНИЕ2: Мне кажется, я проверил, что это проблема с конфигурацией CORS на сервере Lightsail. Я использовал Chrome с отключенной защитой (благодаря TechKangroo https://teckangaroo.com/chrome-disable-web-security/) и смог заставить звонки на сервер Cognito работать. Однако я все еще не могу понять, как настроить сервер Lightsail для разрешения запросов CORS. Я попытался поместить это в файл httpd.conf

Header always set Access-Control-Allow-Origin: "*" Header always set Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT" Header always set Access-Control-Max-Age 60000 Я попытался изменить для параметра AllowOverride значение All в файле httpd.conf. Я попытался добавить файл .htaccess в каталог htdocs (где хранятся веб-файлы). Конечно, перезапуск сервера после каждого изменения. Но пока ничего не получалось. Изменения конфигурации, кажется, игнорируются, основываясь на сообщении CORS, в котором все еще говорится, что Access-Control-Max-Age равен 172800.

Снова любая помощь будет оценена.

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