2014-10-02 21 views
1

我正在創建一個REST-API,並且目前已將Basic Auth定義爲身份驗證。
Symfony的防火牆配置:FOSRestBundle忽略未授權的挑戰配置

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" 
... 

但現在的問題是,如果我不通過的請求瀏覽器我總是會顯示基本驗證彈出窗口。爲了防止這種情況發生,我儘管可以使用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

得到它解決了,問題是:

我有一個kernel.request監聽器這是拋出的AuthenticationException,這似乎導致該事件的進一步傳播失敗,RestBundle偵聽器未正常調用的問題。

爲了完整起見,在修復之後,我遇到了另一個問題,即響應總是包含Exception作爲HTML輸出。爲了解決這個問題,我還必須在Twig配置中配置FOSRestBundle異常控制器。

我的應用程序/ 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