当不存在的用户尝试登录以认知时,它会设置响应标头:
x-amzn-errormessage: User does not exist
x-amzn-errortype: UserNotFoundException:
这是一个安全问题,因为安全响应类似于incorrect username or password
,我曾尝试对lambda使用AWS Cognito Pre身份验证触发器来重置响应标头,但是如果lambda不会被触发,用户不存在。任何建议将不胜感激。
答案 0 :(得分:0)
我已经通过创建一个侦听登录请求的api网关端点lambda来解决了我的问题,如果登录成功,那么我允许我的客户端使用amazon-cognito-identity-js
包进行身份验证。
这是我的lambda:
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
文档。