Как мне потребовать аутентификацию для запросов POST, но разрешить использование без GET для запросов GET в моем API с защитой токена? - PullRequest
1 голос
/ 12 февраля 2020

У меня есть REST API, и я хочу, чтобы определенный маршрут, по которому запросы GET были опубликованы c, но я хочу, чтобы POST запрос требовал токен.

Пример:

// config/packages/security.yaml

security:
    # ...
    firewalls:
        api:
            pattern: ^/api/v1/
            // here I want to allow public GET
            // but want to disallow POST without a token
            guard:
                authenticators:
                    - App\Security\TokenAuthenticator

У меня есть стандартный класс TokenAuthenticator, отвечающий за аутентификацию пользователей.

Как настроить защиту Symfony, чтобы POST запросы требовали авторизации, а GET запросы могли выполняться неаутентифицированными (анонимными) пользователями?

1 Ответ

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

Это может быть очень кратко достигнуто с помощью правил контроля доступа:

Например:

access_control:
        - { path: ^/api/v1, roles: IS_AUTHENTICATED_ANONYMOUSLY, methods: [GET] }
        - { path: ^/api/v1, roles: ROLE_ADMIN, methods: [POST] }

При этом запросы POST к api/v1 потребуют, чтобы пользователь прошел аутентификацию и подтвердил ROLE_ADMIN назначено, но GET запросы по тому же пути будут разрешены для неаутентифицированных пользователей.

...