Можно ли заблокировать доступ к прямому маршруту?
У меня есть API под моим конгом. Я добавил все маршруты, используя маршрут POST (например, в /myapi). Как я могу исключить кого-то из них? Ex. Мне нужно заблокировать доступ к /myapi/somecontroller/somemethod. Является ли это возможным?
1 ответ
Kong не работает над конечными точками, только над apis. Сказал, что ваша проблема является общим желанием при использовании шлюза API. Я решил таким образом:
- В главном интерфейсе API для восходящего потока сгруппируйте все защищенные конечные точки по уникальному маршруту.
protected
:
- / код / защищенный (защищенный доступ)
- / код (публичный доступ)
Добавьте 2 apis в Конг. Один для защищенного API и другой для публичного API.
К защищенному API добавьте плагин ACL с белым списком для одного выделенного потребителя. Этот потребитель может представлять вам или никому.
Я прилагаю возобновленный список этих 2 apis в качестве руководства (используя Kong версии 0.12).
Обратите внимание uris
, preserve_host
а также strip_uri
, Если для strip_uri задано значение true, доступ к API можно получить напрямую через http://my-api.localhost
т.е. / код не является частью реального маршрута.
Я включаю плагин 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"
}
]
}
Вместо ACL вы можете использовать любой другой плагин Authentication как Basic Auth или JWT, но ACL с фиктивным потребителем - самый быстрый обходной путь. Я начал с Конгом чуть более пары недель, поэтому надеюсь, что этот ответ поможет. Возможно, есть лучшее решение, но это мое лучшее на данный момент.