В AWS я построил API-шлюз, который вызывает функцию Lambda. Пользователи получают доступ, войдя в Cognito User Pool, связанный с Cognito Federated Identity Pool, и связанные роли IAM содержат разрешения на вызов API. Метод API Gateway представляет собой запрос POST.
Если я использую пул пользователей в качестве авторизатора API-шлюза, я могу успешно запускать функцию Lambda с помощью запроса ajax в моем веб-приложении на javascript - заметьте, однако, это дает одинаковый доступ каждому пользователю в пуле. Я пытаюсь создать различный доступ на основе группы пользователей Cognito для разных методов, и, поскольку я, очевидно, не могу указать разные группы пользователей для каждого метода при использовании пула пользователей Cognito в качестве авторизатора, я теперь вижу, могу ли я защитить API с помощью AWS_IAM как Авторизатор API. Однако, если я выберу AWS_IAM в качестве авторизатора, я получу обратно:
Нет заголовка «Access-Control-Allow-Origin» на запрошенном ресурсе. Происхождение 'null', следовательно, не разрешено. Ответ имеет HTTP-код состояния 403.
В чем может быть проблема? Как правильно настроить CORS для этого сценария и как должен выглядеть мой ajax-запрос в клиентском javascript? Cognito позаботится о том, чтобы подписать меня, или мне нужно что-то сделать с заголовками?
Когда я использовал пул пользователей Cognito, у меня было:
$.ajax({
method: 'POST',
url: _config.api.invokeUrl + '/savesurv',
headers: {
Authorization: authToken
},
data: JSON.stringify(Data),
contentType: 'application/json',
success: callback,//console.log("complete"),
error: function ajaxError(jqXHR, textStatus, errorThrown) {
console.error('Error requesting save: ', textStatus, ', Details: ', errorThrown);
console.error('Response: ', jqXHR.responseText);
alert('An error occured when requesting to save:\n' + jqXHR.responseText);
}
});
В этом случае это сработало, нужно ли менять его при использовании AWS_IAM в качестве авторизации для шлюза API?