我一直在使用Symfony 2.1開發自定義身份驗證系統。很多戰鬥與Symfony的後,我已經得到了一些工作,但不完全...Symfony2自定義身份驗證:用戶已登錄但未通過身份驗證
問題:登錄(通過表單)後,用戶登錄,但沒有通過認證。
上下文:由於用戶必須通過HTML表單提交其憑據,因此我必須創建一個擴展爲AbstractAuthenticationListener
的偵聽器。
問題:聽衆不應該自動將令牌添加到SecurityContext
嗎?如果情況並非如此,我應該手動進行嗎?
過程:
用戶通過HTML表單
監聽截獲請求遞交國書,並運行attemptAuthentication
偵聽器調用的AuthenticationManager的(實現AuthenticationProviderInterface)身份驗證方法
的AuthenticationManager調用UserProvider(實現UserProviderInterface)從我的web服務檢索用戶的數據。
UserProvider返回用戶類實現的UserInterface
AuthenticationManager會創建一個令牌實施TokenInterface。
AuthenticationManager將令牌返回給偵聽器。
聽衆attemptAuthentication收益從AuthenticationManager會的方式令牌:驗證
用戶登錄,但沒有通過認證。
我沒有顯示代碼示例以避免重載帖子。如果需要,我會編輯帖子。
當一切正常工作,所有的聽衆。attemptAuthentication所要做的就是返回經認證的令牌,該令牌又來自authenticationManager.authenticate。不需要在security.context中顯式設置它。第一步是驗證令牌是否被實際驗證,因爲其他各種偵聽器都會進入。經過身份驗證的令牌是UsernamePasswordToken嗎? – Cerad 2013-03-26 18:33:16
經過身份驗證的令牌是authenticationManager.support方法中定義的我的CustomToken實例。 – SupaCoco 2013-03-27 08:19:38
您的流程描述幫助我瞭解了一切的工作流程。我實現了一個基於BorisMorel LdapBundle的自定義身份驗證提供程序,並且您的問題已解答我的所有問題!謝謝!! :) – 2014-07-25 14:18:30