【发布时间】:2017-10-17 23:15:18
【问题描述】:
我正在处理一些遗留应用程序,并希望使用 Amazon AWS API Gateway 来减轻一些缺点。
应用程序 A 可以调用带参数的 URL,但不支持 HTTP 基本身份验证。像这样:
https://example.com/api?param1=xxx¶m2=yyy
应用程序 B 能够处理这些调用并做出响应。但是应用程序 B 需要 HTTP 基本身份验证。
现在的问题是,我可以使用 Amazon AWS API Gateway 来缓解这种情况吗?
我们的想法是创建这种风格的 API:
http://amazon-aws-api.example.com/api?authcode=aaaa¶m1=xxx¶m2=yyy
然后亚马逊应该检查授权码是否正确,然后使用一些存储的用户名+密码从应用程序 A 调用 API 并使用所有剩余参数。结果应该只是传递回应用程序 B。
我也可以提供用户名 + 密码作为参数,但我想使用长验证码并在亚马逊存储相当短的密码更安全。也可以使用像 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&param1=xxx&param2=yyy
由于 HTTPs 请求的参数是加密的,并且它们没有存储在 Lambda 中,所以这种方法应该是相当安全的。
现在的问题是,如何将 API 网关连接到 Lambda。
【问题讨论】: