FOSRestBundle忽略未经授权的质询配置

时间:2014-10-02 07:58:49

标签: php rest symfony 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弹出窗口。为了防止这种情况,我可以使用FOSRestBundle的unauthorized_challenge配置更改为自定义身份验证质询。坚韧不会改变返回的标题。

配置休息包:

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

FOSRestBundle版本为1.4.2,Symfony版本为2.3.18。

知道忽略FOSRestBundle设置会出现什么问题?

1 个答案:

答案 0 :(得分:1)

解决了,问题是:

我有一个kernel.request监听器,它抛出了一个AuthenticationException,这似乎导致了事件的进一步传播失败并且没有正确调用RestBundle监听器的问题。

为了完整性,在修复之后我遇到了另一个问题,即响应总是包含Exception作为HTML输出。为了解决这个问题,我还必须在Twig配置中配置FOSRestBundle异常控制器。

我的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