我正在创建一个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设置会出现什么问题?
答案 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