Безопасный интерфейс, но публично разрешенный запрос AJAX

Я работаю над проектом, использующим платформу API.

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

Например:

/**
 * An ordered dish.
 *
 * @ApiResource(
 *     attributes = {"access_control" = "is_granted('ROLE_USER')"},
 *     collectionOperations = {
 *         "get" = {"access_control" = "is_granted('IS_AUTHENTICATED_ANONYMOUSLY')"},
 *         "post" = {"access_control" = "is_granted('ROLE_ADMIN')"}
 *     },
 *     itemOperations = {
 *         "get" = {"access_control" = "is_granted('IS_AUTHENTICATED_ANONYMOUSLY')"}
 *     }
 * )
 *
 * @ORM\Entity
 * @ORM\Table(name = "uitgekookt_dish")
 */
class Dish

Когда я просматриваю документы в браузере, я могу просто получить доступ к / api / блюда из-за IS_AUTHENTICATED_ANONYMOUSLY. Я вижу, что там доступны и другие методы получения / публикации (хотя некоторые методы публикации защищены).

Однако документы не должны быть общедоступными. Как мне гарантировать, что в Symfony 4 я разделяю свою конфигурацию безопасности для документов и запросов ajax?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
96
2

Ответы 2

Не уверен, правильно ли я понял, но вы хотите ограничить /api/doc (или любой другой URL-адрес, который вы используете для документов), поэтому добавьте его в access_control в security.yaml

security:
    access_control:
        - { path: ^/api/doc, roles: [ROLE_ADMIN] }

документы в API-платформе доступны через / api. Нет / doc

apfz 05.04.2018 21:23

Сначала отключите пользовательский интерфейс Swagger, который загружается для каждой страницы, и зарегистрируйте его как известное местоположение, как указано в эта запись в документации:

# app/config/routes.yaml
api_platform:
    # ...
    enable_swagger_ui: false

# app/config/routes.yaml
swagger_ui:
    path: /api/docs
    controller: api_platform.swagger.action.ui

Затем, как указано @zajca, добавьте маршрут управления доступом для защиты этой страницы и базовых конечных точек JSON и Hydra:

 security:
    access_control:
        - { path: ^/api/docs, roles: [ROLE_ADMIN] }

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