2013-03-27 86 views
1

我正在努力與Symfony2的自定義身份驗證機制。使用UsernamePasswordForm身份驗證與自定義AuthenticationProvider

我想要做什麼: 我需要修改常規的基於UsernamePasswordForm的身份驗證行爲。所需的唯一修改是,證書不會針對數據庫進行檢查,而是一些自定義的unix auth deamon。用戶本身仍位於數據庫中。

我做了什麼: 我發揮各地將一個完全成熟的定製身份驗證提供者在此基礎上Symfony cookbook entry,並將大部分地區只是延長了不同UsernamePassword類,但它沒有工作呢。由於UsernamePasswordFormAuthenticationListener有很多必需的參數,因此在服務配置中設置AuthenticationListener時特別存在一些問題。目前我不確定最終是否能解決問題,因爲我們的數據庫設置存在一些問題。

我需要什麼: 有沒有修改默認的登錄表單一個簡單的方法沒有一個完整的AuthenticationProvider的完整要求? Imho在默認行爲中進行一些自定義修改是一個非常常見的問題。

會很高興任何想法或提示。

回答

0

回答我自己的問題:我最終設法解決了我的問題,感謝this blog post顯示了一個解決方案。基本思想是擴展默認的表單登錄認證和「竊取」它的監聽器。這樣你就可以重用大部分現有的代碼。關鍵部分是AuthenticationProviderSecurityFactory的創建和配置。並且不要錯過使用您自己的提供商密鑰,而不要使用security.yml中的form_login

在博客文章中,作者創建了自己的UserProvider,但它僅使用默認數據庫之一。

0

我還沒有嘗試過這個自己,但你應該能夠通過設置參數設置爲插入自己的AuthenticationProvider:

security.authentication.provider.dao.class: 
    ..Security\Core\Authentication\Provider\MyDaoAuthenticationProvider 

你的供應商將延長道和在此改變checkAuthentication。

同樣,我還沒有真正做到這一點,安全系統是非常棘手的,所以它可能會或可能不會工作。

+0

感謝您的建議。讀你的想法提醒我,我已經在某個地方看到了一種以這種方式覆蓋核心類的解決方案。不知道爲什麼我沒有進一步調查。 假期結束後我會在假期後報告。 – althaus 2013-03-28 17:03:03

+0

我剛發佈了自己的答案,因爲我發現了一篇非常有用的博客文章。它與你的想法共享相同的基礎,你的想法可能更短,也可以工作......但這樣我就安全了。 :d – althaus 2013-04-05 15:26:12