FOSRestBundle игнорирует конфигурацию несанкционированного вызова

Я создаю REST-API, и в настоящее время в качестве аутентификации определена Basic Auth.
Конфигурация брандмауэра Symfony:

secured_area:
    pattern:    ^/
    anonymous: false
    http_basic:
        realm: "Secured Basic Auth Area"

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

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Secured Basic Auth Area"
...

Но проблема в том, что если я делаю запрос через браузер, я всегда получаю всплывающее окно Basic Auth. Чтобы предотвратить это, я мог бы использовать unauthorized_challenge конфигурации FOSRestBundle, чтобы изменить его на пользовательскую аутентификацию. Жесткий, он не меняет возвращаемый заголовок.

Конфиг для пакета отдыха:

fos_rest:
    unauthorized_challenge: "xxxBasic realm=\"Foo Area\""
    access_denied_listener:
        json: true

Версия FOSRestBundle — 1.4.2, версия Symfony — 2.3.18.

Любая идея, в чем может быть проблема, что параметр FOSRestBundle игнорируется?


person enricog    schedule 02.10.2014    source источник


Ответы (1)


Разобрался, проблема была:

У меня был прослушиватель kernel.request, который выдавал AuthenticationException, это, казалось, приводило к проблеме, заключавшейся в том, что дальнейшее распространение события не удалось, и прослушиватель RestBundle не был вызван должным образом.

Для полноты картины после того, как это было исправлено, я столкнулся с другой проблемой, заключавшейся в том, что ответ всегда содержал исключение в виде вывода HTML. Чтобы решить эту проблему, мне также пришлось настроить контроллер исключений FOSRestBundle в конфигурации Twig.

Мой app/config.yml теперь выглядит так (для соответствующих частей):

twig:
    debug:            "%kernel.debug%"
    strict_variables: "%kernel.debug%"
    # Handle expections via the FOSRestBundle
    exception_controller: 'FOS\RestBundle\Controller\ExceptionController::showAction'

fos_rest:
    unauthorized_challenge: "xxxBasic realm=\"Foo Area\""
    access_denied_listener:
        json: true
person enricog    schedule 02.10.2014