如何仅授予他们的Cognito子用户和具有完整AWS特权的安全服务器(安全的后端服务器到服务器身份验证),对身份验证用户进行身份验证

时间:2019-06-12 14:59:59

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

TL; DR:我想从另一台服务器向我自己的后端API进行经过身份验证的请求。

我有一个node.js后端API(由claudia-js配置并部署为AWS lambda,由AWS API网关进行接口并由Cognito保护)

我的React前端可以向我的后端发出请求;我只是使用react Amplify以通常的流程登录用户,获取令牌,然后向API网关发出HTTPS请求。

我有另一台服务器(AWS elasticbeanstalk,基本的用户名-密码auth),该服务器托管微服务,该微服务连接到用户可以通过后端API访问的调度系统(议程js)。 问题:我们需要能够以其他方式进行沟通。

将作业与用户ID保存在一起(我们只使用cognito子作为我们的用户ID,这使事情保持一致)。一项工作需要按时间表(代表一个月一次)代表我们的用户联系后端API。这要求仅给定cognito用户ID即可认证为cognito用户,获取令牌并以编程方式向后端API发出REST / HTTP请求。

完成:

  • 将作业处理器服务器作为应用程序客户端添加到我的认知用户池

  • 编写了可以使用我自己的凭据(硬编码的用户名/密码)针对认知用户池进行身份验证的作业处理器

  • 使用上述步骤中的令牌将安全的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,但是我希望能够以 any 这个脚本来调用API用户,通过向Cognito Auth API提供Cognito用户ID以及AWS密钥,IAM角色或.env var中所需的任何内容。我只是不知道该如何实现! TIA

1 个答案:

答案 0 :(得分:0)

对于任何阅读者:我放弃了这种方法,而是使用IAM auth和api网关sdk客户端授权了客户端服务器。用户信息(不敏感)在http正文中发送