是否可以阻止访问直接路由?

时间:2018-03-22 13:52:27

标签: kong

我在我的kong下面有一个api。我使用POST路由添加了所有路由(例如在/ myapi下)。我怎样才能排除他们中的某些人?防爆。我需要阻止访问/ myapi / somecontroller / somemethod。有可能吗?

1 个答案:

答案 0 :(得分:0)

Kong不会在端点上工作,只是在apis上工作。 说,在使用api网关时,您的问题是一个常见的愿望。我这样解决了:

  • 在您的主要上游API中,将所有受保护的端点分组到唯一路由protected下:
  
      
  • / code / protected(受保护访问)
  •   
  • / code(公共访问)
  •   
  • 将2个api添加到kong。一个用于受保护的api,另一个用于公共API。

  • 对受保护的api添加插件ACL和白名单,其中一个是专用的消费者。该消费者可以代表您或任何人。

我附上这两个api的恢复清单作为指南(使用孔版0.12)。

关注urispreserve_hoststrip_uri。将strip_uri设置为true意味着可以通过http://my-api.localhost直接到达api,即/ code不是实际路径的一部分。

我免费提供插件CORS;)

// api public
$ prettycurl curl --url http://localhost:8001/apis/my-api
{
    "methods": [
        "GET",
        "POST",
    ],
    "name": "my-api",
    "preserve_host": false,
    "strip_uri": true,
    "upstream_url": "http://my-api.localhost",
    "uris": [
        "/code"
    ]
}
// api protected    
$ prettycurl curl --url http://localhost:8001/apis/my-api-protected
{
     "methods": [
        "GET",
        "POST",
    ],
    "name": "my-api-protected",
    "preserve_host": false,
    "strip_uri": true,
    "upstream_url": "http://my-api.localhost",
    "uris": [
        "/code/protected"
    ]
}

// api public plugins
$ prettycurl curl --url http://localhost:8001/apis/my-api/plugins
{
    "data": [
        {
            "config": {
                "credentials": false,
                "headers": [
                    "X-Requested-With",
                    "Authorization",
                    "X-api-key",
                    "Content-Type"
                ],
                "methods": [
                    "GET",
                    "POST",
                ],
                "origins": [
                    "http://localhost:3000"
                ],
                "preflight_continue": false
            },
            "enabled": true,
            "name": "cors"
        }
    ],
}

// api protected plugins
$ prettycurl curl --url http://localhost:8001/apis/my-api-protected/plugins
{
    "data": [
        {
            "config": {
                "whitelist": [
                    "admin"
                ]
            },
            "enabled": true,
            "name": "acl"
        },
        {
            "config": {
                "credentials": false,
                "headers": [
                    "X-Requested-With",
                    "Authorization",
                    "X-api-key",
                    "Content-Type"
                ],
                "methods": [
                    "GET",
                    "POST"
                ],
                "origins": [
                    "http://localhost:3000"
                ],
                "preflight_continue": false
            },
            "enabled": true,
            "name": "cors"
        }
    ]
}

您可以使用任何其他身份验证插件作为基本身份验证或JWT,而不是ACL,但具有虚拟使用者的ACL是最快速的解决方法。我刚开始在几个星期就开始了Kong,所以我希望这个答案能有所帮助。可能有一个更好的解决方案,但这是我目前最好的。