我在我的kong下面有一个api。我使用POST路由添加了所有路由(例如在/ myapi下)。我怎样才能排除他们中的某些人?防爆。我需要阻止访问/ myapi / somecontroller / somemethod。有可能吗?
答案 0 :(得分:0)
Kong不会在端点上工作,只是在apis上工作。 说,在使用api网关时,您的问题是一个常见的愿望。我这样解决了:
protected
下:
- / code / protected(受保护访问)
- / code(公共访问)
将2个api添加到kong。一个用于受保护的api,另一个用于公共API。
对受保护的api添加插件ACL和白名单,其中一个是专用的消费者。该消费者可以代表您或任何人。
我附上这两个api的恢复清单作为指南(使用孔版0.12)。
关注uris
,preserve_host
和strip_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,所以我希望这个答案能有所帮助。可能有一个更好的解决方案,但这是我目前最好的。