我有来自Slack的传出webhook的POST请求,这些请求通过API网关传递到AWS Lambda函数。 为了安全起见,我希望在它们进入我的lambda函数之前使用API网关过滤请求,以减少lambda函数被调用的次数。
从技术上讲,电话来自哪里或者去哪里都无关紧要。
我的问题的核心是,如果某个字段与我期望的字段不匹配,我想知道如何使用AWS Api Gateway过滤/拒绝API调用。
例如,考虑一下这个json。
public int fun()
{
FutureTask<Integer> dialogTask = new FutureTask<Integer>(new Callable<Integer>()
{
@Override public Integer call()
{
return JOptionPane.showConfirmDialog(SaveToCloudJDialog.this, message, title, JOptionPane.YES_NO_OPTION);
}
});
SwingUtilities.invokeLater(dialogTask);
int choice = dialogTask.get();
}
如果令牌字段与预期的&#34; specificToken&#34;匹配,我想拒绝该请求。值。
答案 0 :(得分:1)
您可以使用REQUEST
类型的自定义授权程序来执行此操作。 REQUEST
类型的自定义授权程序可以使用请求正文来授权请求。
参考:Create an API Gateway Custom Authorizer Lambda Function(向下滚动到REQUEST
类型)
基本上,您在API网关之间编写另一个用作中间件的Lambda。此自定义授权程序将决定是允许请求还是将Unauthorized
返回到API网关。
答案 1 :(得分:0)
我们有相同的要求(使用lambda授权者验证松弛的请求),可悲的是REQUEST
类型确实不能访问请求的body
。标头,路径,查询字符串...但不是正文。这似乎是设计使然。参见Access POST Request body from Custom Authorizer Lambda Function。
我们尝试了一个自定义的主体映射模板,以将值从主体中拉出并放入标头中,但是在 授权之后应用了映射,所以这是行不通的。
最后,我们决定在slash命令调用的webhook的查询字符串中放入自己的令牌,并进行验证,这可以在REQUEST
授权者中进行。不太安全,但是可以。