我正在处理一些遗留应用程序,并希望使用Amazon网关来缓解一些缺陷。
应用程序A可以用参数调用URL,但不支持HTTP。像这样:https://example.com/api?param1=xxx¶m2=yyy
应用程序B能够处理这些调用并作出响应。但是应用程序B需要HTTP基本身份验证。
现在的问题是,我可以使用Amazon网关来缓解这种情况吗?
其想法是创建一个这种风格的API:http://amazon-aws-api.example.com/api?authcode=aaaa¶m1=xxx¶m2=yyy然后亚马逊应该检查编写的代码是否正确,然后使用一些存储的username+password从Application调用API中的所有剩余参数。结果应该直接传回应用程序B。
我也可以提供用户名+密码作为参数,但我认为使用长的编写代码和在Amazon存储相当短的密码是更安全的。您还可以使用更改的创作代码,就像在2因素身份验证中使用的那样。
找到解决方案的途径:
我根据HTTPS模板创建了以下AWS Lambda函数:
'use strict';
const https = require('https');
exports.handler = (event, context, callback) => {
const req = https.get(event, (res) => {
let body = '';
res.setEncoding('utf8');
res.on('data', (chunk) => body += chunk);
res.on('end', () => callback(null, body));
});
req.on('error', callback);
req.end();
};如果我使用Test函数并向它提供此事件,它将按预期工作:
{
"hostname": "example.com",
"path": "/api?param1=xxx¶m2=yyy",
"auth": "user:password"
}我认为从这里开始最好的方法是使用API网关提供类似于:https://amazon-aws-api.example.com/api?user=user&pass=pass¶m1=xxx¶m2=yyy的接口。
由于HTTPs请求的params是加密的,并且没有存储在Lambda中,所以这个方法应该是相当安全的。
现在的问题是,如何将API网关连接到Lambda。
发布于 2017-10-18 01:44:52
您可以使用API网关实现上述场景。但是,它不仅仅是一个代理集成,而是需要一个Lambda函数,它将通过执行转换来转发请求。
如果凭据是调用API的固定凭据,则可以使用Lambda中的环境变量来存储它们,使用AWS KMS键进行加密。
但是,如果为每个用户发送凭据(例如,从web浏览器登录到应用程序),这种方法的缺点是需要在检索用户名和密码的同时存储用户名和密码。它不鼓励存储甚至加密的密码。如果是这样的话,最好是传递(也执行转换),而不是在两者之间存储和检索。
https://stackoverflow.com/questions/46800577
复制相似问题