Мне удалось решить мою проблему, создав лямбду конечной точки шлюза API, которая прослушивает запрос на вход в систему. Если вход был успешным, я разрешил моему клиенту выполнить аутентификацию с использованием пакета amazon-cognito-identity-js
.Вот моя лямбда:
const UserManagement = require('./UserManagement');
exports.handler = async (event) => {
const { username, password } = JSON.parse(event.body);
let body = '';
let activeUser;
try {
const userManagement = UserManagement.getInstance();
activeUser = await userManagement.login(username, password);
if (activeUser) {
body = JSON.stringify({
login: true
});
}
} catch (error) {
console.error('Error in user management.', error);
body = JSON.stringify({
login: false
});
}
return {
statusCode: 200,
body,
headers: Object.assign({
'Access-Control-Allow-Headers': 'Content-Type,Authorization',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials': true,
'Access-Control-Allow-Methods': 'POST',
}, {}),
};
}
моя бессерверная конфигурация
provider:
...
- Effect: "Allow"
Action:
- "lambda:InvokeFunction"
Resource: "*"
functions:
login:
timeout: 600
memorySize: 1600
handler: functions/login.handler
events:
- http:
path: /login
method: post
cors: true
для userManagement см. Документацию amazon-cognito-identity-js
.