2012-01-20 52 views
3

我一直在嘗試使用symfony2進行一段時間的設置,並且它已經進行了很長一段時間,但我遇到了一些障礙。我無法弄清楚如何獲得我的安全設置。在我們的機構中​​,我們安裝了cas(單點登錄)和一個處理所有身份驗證內容的靜態類。它被稱爲看門人。 Gatekeeper完成所有的角色檢查和用戶名登錄。我希望能夠使用symfony2的授權內容,但沒有任何驗證內容。這可能嗎?我已閱讀文檔,但似乎這些東西太緊密地分開了。有沒有人有任何關於這個話題的見解?Symfony2的安全設置沒有登錄

回答

3

如果您使用網守類請求之前驗證打你,你可以創建防火牆「預認證」監聽器(即驗證防火牆之前發生)通過延長AbstractPreAuthenticatedListener和實施getPreAuthenticatedData()

class GatekeeperListener extends AbstractPreAuthenticatedListener 
{ 
    protected function getPreAuthenticatedData(Request $request) 
    { 
     return array(
      Gatekeeper::getCurrentUsername(), // username 
      '',        // credentials 
     ); 
    } 
} 

您需要創建一個安全工廠,以便爲系統引入一個新的身份驗證偵聽器。這個過程是這樣的食譜文章中描述:

How to create a custom Authentication Provider: The Factory

security.yml應該是這個樣子:

security: 
    factories: 
     - "%kernel.root_dir%/../src/Acme/DemoBundle/Resources/config/security_factories.yml" 

    firewalls: 
     main: 
      pattern: . 
      gatekeeper: true 
+0

克里斯,感謝您的回覆。我終於解決了這個問題,還有一個問題。憑證是返回數組的一部分嗎?是逗號分隔的一組角色還是一組角色?感謝您的有益迴應。我不認爲PreAuthenicatedListener在Symfony2文檔中的任何地方都被提及(除了API)。 –

+2

該數組中的第二項將是用戶的密碼,但您可以只返回一個空字符串。 –

+0

好克里斯,我想我有更多的工作,但現在我不斷收到「在SecurityContext中找不到令牌」異常。令牌插入安全上下文的位置在哪裏?我是否需要這樣做,還是應該由我的用戶提供商在理論上發生這種情況? –