如何在不存在的用户上获取AWS Pre身份验证触发器

时间:2019-05-02 09:13:08

标签: node.js amazon-web-services amazon-cognito

当不存在的用户尝试登录以认知时,它会设置响应标头:

x-amzn-errormessage: User does not exist 
x-amzn-errortype: UserNotFoundException:

这是一个安全问题,因为安全响应类似于incorrect username or password,我曾尝试对lambda使用AWS Cognito Pre身份验证触发器来重置响应标头,但是如果lambda不会被触发,用户不存在。任何建议将不胜感激。

1 个答案:

答案 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文档。