如果字段不匹配,则拒绝Slack与AWS Api网关的application / x-www-urlencoded调用

时间:2017-10-05 15:12:58

标签: amazon-web-services aws-lambda aws-api-gateway slack

我有来自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;匹配,我想拒绝该请求。值。

2 个答案:

答案 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授权者中进行。不太安全,但是可以。