Можно ли заблокировать доступ к прямому маршруту?

У меня есть 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 с фиктивным потребителем - самый быстрый обходной путь. Я начал с Конгом чуть более пары недель, поэтому надеюсь, что этот ответ поможет. Возможно, есть лучшее решение, но это мое лучшее на данный момент.

Другие вопросы по тегам