javascript - 如何仅给定 Cognito 用户和具有完全 AWS 权限的安全服务器(安全后端服务器到服务器身份验证)来验证 Cognito 用户

标签 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 以常规流程登录用户,获取 token ,然后向 API 网关发出 HTTPS 请求。

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

作业使用 userID 保存到数据库(我们只使用 cognito sub 作为我们的 userID,它使事情保持一致)。一项工作需要代表我们的用户按计划(比如说每月一次)联系后端 API。这需要以认知用户身份进行身份验证,仅给出认知用户 ID,获取 token 并以编程方式向后端 API 发出 REST/HTTP 请求。

完成:

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

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

  • 使用上述步骤中的 token 将安全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 key 、IAM Angular 色或 .env var 中需要的任何内容。我只是不知道如何实现这一目标!时间差

最佳答案

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

关于javascript - 如何仅给定 Cognito 用户和具有完全 AWS 权限的安全服务器(安全后端服务器到服务器身份验证)来验证 Cognito 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56565197/

相关文章:

javascript - 如何将分钟转换为时间(hh :mm:ss)?

node.js - 能够使用 Polymer 3 解析模块,但不能使用 Lit Element

amazon-web-services - 使用 AWS EC2 Golang GO 端点在 Docker 部署上获取 JSON 时出现问题

amazon-web-services - AWS IOT 挣扎于获取事物的阴影

javascript - onclick和onclientclick web方法在onclick之后执行

javascript - AngularJS - 范围错误 : 'Maximum call stack size exceeded after' application start

javascript - 如何创建一个扩展未预先确定的其他类的类

node.js - 微软图 API : Get new access token from refresh token in graph without redirect url

node.js - Sailsjs中间件解析res.body

swift - AWS Mobile Hub Google 身份验证 iOS