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
答案 0 :(得分:0)
对于任何阅读者:我放弃了这种方法,而是使用IAM auth和api网关sdk客户端授权了客户端服务器。用户信息(不敏感)在http正文中发送