TL; DR: я хочу сделать запрос на проверку подлинности cognito к своему собственному бэкэнд-API с другого сервера.
У меня есть бэкэнд-API node.js (настроенный с помощью claudia-js и развернутый как AWS lambda)с интерфейсом шлюза API AWS и защищенным с помощью Cognito)
Мой интерфейс React может выполнять запросы к моему бэкэнду без проблем;Я просто использую реакцию Amplify, чтобы войти в систему в обычном потоке, получить токен, а затем сделать HTTPS-запросы к API-шлюзу.
У меня есть другой сервер (AWSasticbeanstalk, базовая аутентификация имени пользователя и пароля), на котором размещается микросервис, подключенный к системе планирования (повестка дня-js), к которой пользователи могут обращаться через внутренний API. Проблема: нам нужно иметь возможность общаться другим способом.
Задания сохраняются в БД с идентификатором пользователя (мы просто используем подпрограмму cognito в качестве нашего идентификатора пользователя, это делает вещи согласованными),Одна работа требует связи с внутренним API от имени нашего пользователя по расписанию (скажем, раз в месяц).Для этого требуется аутентификация пользователя cognito, учитывая только идентификатор пользователя cognito, получить токен и программно выполнить запрос REST / HTTP к бэкэнд-API.
Выполнено:
Добавил сервер обработчика заданий в качестве клиента приложения в мой пул пользователей Cognito
Записал обработчик заданий, который может проходить аутентификацию в пуле пользователей Cognito, используя мои собственные кредиты (жестко заданное имя пользователя / pwd)
Записать защищенный HTTP-запрос к API бэкэнда, используя токен из вышеприведенного шага
Код процессора задания:
// auth and cognito params
const params = {
AuthFlow: 'ADMIN_NO_SRP_AUTH',
ClientId: 'xxxxxxxxxxxxxxxxxxxxxxx',
UserPoolId: 'XX-XXXX-X_XXXXXXXXX',
AuthParameters: {
USERNAME: 'my-username',
PASSWORD: 'my-pwd',
},
};
cognitoidentityserviceprovider.adminInitiateAuth(params, (err, data) => {
if (err) console.log(err);
const token = data.AuthenticationResult.IdToken;
// HTTP opts to call my backend api
const options = {
method: 'GET',
url: 'https://my.api.url/tasks/action',
headers: {
Authorization: `Bearer ${token}`,
},
json: true,
};
// Call my backend api
rp(options, (error, response, body) => {
if (error) throw new Error(error);
console.log(body);
});
});
Приведенный выше код работает отлично, я могу вызывать свой собственный API как пользователь (в данном случае я сам), но я хотел бы иметь возможность вызывать API с этим сценарием как любой пользователь ,предоставление API Cognito Auth с идентификатором пользователя Cognito и секретным ключом AWS, ролью IAM или чем-то, что необходимо в .env var или чем-то еще.Я просто не знаю, как этого добиться!ТИА