Как ограничить доступ к определенному маршруту по порту с Symfony 5? - PullRequest
1 голос
/ 12 февраля 2020

Наш веб-сервер прослушивает порты 80 и 8080, и я хочу, чтобы указанный маршрут c был доступен только через порт 8080, но чтобы запретить доступ всем пользователям, которые пытаются получить доступ к этому маршруту через порт 80.

У меня есть несколько маршрутов в моем routes.yaml

testing-logging:
  path: /testing/logging
  controller: Test\Infrastructure\API\HTTP\Technical\LoggingController::handle
  methods: [GET]

healthcheck:
  path: /healthcheck
  controller: Test\API\HTTP\Technical\HealthcheckController::handle
  methods: [GET]

Конечно, есть еще несколько маршрутов, но они похожи на эти.

Это микросервис, поэтому нет Любые пользователи.

Я хочу ограничить доступ к некоторым маршрутам через пользовательский порт. Конечно, другие маршруты должны работать как и раньше со стандартным портом.

Я пытался использовать защиту:

security:
    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        in_memory: { memory: null }
    firewalls:
        dev:
            security: true
            anonymous: ~
            methods: [POST]
        main:
            anonymous: lazy
    access_control:
        - { path: ^/healthcheck, roles: IS_AUTHENTICATED_ANONYMOUSLY, port: 8080 }

1 Ответ

2 голосов
/ 12 февраля 2020

Просто добавьте еще одно правило access_control для порта 80.

access_control:
        - { path: ^/healthcheck, roles: IS_AUTHENTICATED_ANONYMOUSLY, port: 8080 }
        - { path: ^/healthcheck, roles: ROLE_ADMIN, port: 80 }

Поскольку у вас нет механизма аутентификации, ни у одного пользователя не будет ROLE_ADMIN. Таким образом, любой пользователь, пытающийся получить доступ к ^/healthcheck через порт 80, получит отказ в доступе.

...