簡體   English   中英

Symfony2中的自定義登錄控制器

[英]Custom login controller in Symfony2

在過去的兩天內,我通讀了Symfony2中有關身份驗證的多種資源。 我認為我了解大多數部分,但是我覺得我並不了解整個事情。 我成功創建了兩個身份驗證提供程序和一個UserProvider,但是我不了解如何自定義登錄過程。

我試圖做的是編寫一個REST API,該API也將由我也編寫的客戶端使用。 客戶端將顯示一個表單,並通過Ajax發送憑據。 因此,我不想使用HTTP基本身份驗證(我不想彈出瀏覽器窗口),我不想使用OAuth或任何令牌(但是使用憑據),並且我不想使用一個form_login(登錄表單由Angular呈現)。

使用我的自定義身份驗證提供程序,我可以使用我在登錄控制器中設置的cookie來驗證客戶端是否已登錄。 但是,如果我嘗試使用會話/ Symfony安全捆綁包,我不知道如何登錄(或在Symfony中登錄意味着什么)。 我可以避免Symfony的所有安全措施,並滾動自己的實現,但是我更希望了解Symfony如何期望身份驗證提供程序和登錄控制器一起工作。

我想要的是客戶機可以檢查其是否已登錄,登錄和注銷的一種途徑。

GET /session  # return the session if it exists, or 401
POST /session  { session: { email: testy@mctest, password: test1234 }} # login
DELETE /session # destroy session

我將如何以“ Symfony”方式實現這一目標? (在Symfony中,在身份驗證提供程序之外解釋常規身份驗證概念的要點)

從我個人所知道的:-)中,我將嘗試使它變得更加冗長和簡單。

這是我在基於Symfony Security組件實現自己的Security層時所了解的。 如果有什么不對的地方,請告訴我,我會予以糾正以使其更准確。

安全組件可與防火牆一起使用 防火牆定義了一個由安全組件負責的“區域”。

對於每個防火牆,通常都將匹配與當前請求匹配的模式 如果匹配,則安全組件嘗試確定是否允許該請求訪問資源。

為此,“安全性”組件分為兩個步驟:

  • 首先:對用戶進行身份驗證 如果用戶未通過身份驗證,我們將無法授權他。 因此,該組件將通過其身份驗證管理器以對用戶進行身份驗證。 以Symfony方式對用戶進行身份驗證意味着嘗試創建與要進行身份驗證的當前請求匹配的Token (實際上是TokenInterface類的實例)。

    應當通過身份驗證偵聽器(實現ListenerInterface接口的類)來創建此令牌。 例如,通常將使用UserProvider將User設置為Token對象。

    然后,在創建令牌時, 並不意味着令牌已通過身份驗證 感謝身份驗證管理器,此令牌將得到身份驗證。 身份驗證管理器是一種經常使用的類型,基於提供程序 ,它們將檢查當前令牌的憑據(或其他內容)是否有誤。 例如, DaoAuthenticationProvider將檢查令牌用戶提供的密碼是否與我們的用戶提供程序提供給我們的密碼匹配。 如果不是,則失敗:另一個提供程序可以驗證當前令牌,否則將失敗。

http://symfony.com/doc/current/components/security/firewall.html

  • 第二: 授權用戶。 為此,建議您在線閱讀Symfony文檔中有關該章的章節。 你可以在這里找到它 它基於AccessDecisionManager ,它將決定是否允許基於身份驗證令牌的當前用戶訪問資源。 通常這要歸功於名為Voters的類, 該類投票以決定是否允許用戶訪問當前資源。

    選民可以投反對票 ,可以另投贊成票 ,而另一個可以投票,我不知道 AccessDecisionManager做出最終決定,該決定將基於其配置方式確定這些投票是允許用戶使用(“任何允許用戶使用”還是禁止用戶使用(“任何人都不使用嚴格”))。

我認為這是您應該了解的有關安全性組件的基礎。 請記住,特別是對於身份驗證部分,首先要理解可能會非常棘手。

最后但並非最不重要的一點是,我強烈建議您閱讀本章: 在這里! 如果您想了解這個棘手但很棒的組件內部發生的事情,這是關鍵,也是您的聖經。

現在,對於您的登錄問題:對您有用的是檢查如何創建自定義偵聽器(請參閱我的答案的身份驗證部分),以創建自己的業務邏輯“我如何基於身份驗證用戶身份”當前請求”。 您的表單將是防火牆區域的入口點 ,然后將指向該防火牆區域。 該偵聽器將檢查您的表單提供的信息是否在請求中,然后創建令牌。 然后,由於您提供的信息,您將有一種自定義方式來對令牌進行身份驗證

(對不起我的英語不好 !)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM