簡體   English   中英

在Symfony2上通過外部API配置用戶身份驗證時出現問題

[英]Problems configuring user authentication by external API on Symfony2

我在為新的Symfony2應用程序驗證用戶時遇到問題。

此應用程序通過API獲取所有信息,因此不使用任何數據庫。 當用戶進入登錄頁面時,他會在登錄表單中介紹用戶和密碼。 然后,我必須使用API​​調用來驗證他。 如果該API調用不是用戶,則返回“false”,如果是正確的用戶,則返回令牌密鑰和令牌密鑰。 使用此令牌密鑰和密鑰,在用戶會話期間,我可以生成渲染應用程序的所有頁面所需的所有API請求。 一旦用戶會話結束並且刪除了令牌密鑰和秘密,則用戶必須再次登錄。

我真的不知道如何實現。 我讀了http://symfony.com/doc/current/cookbook/security/custom_provider.htmlhttp://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html ,我仍然如此丟失... :(

誰能幫我?

非常感謝 :)

如果要編寫自定義身份驗證,則可以找到正確的鏈接。 作為示例,您可以看到OAuth授權HWIOAuthBundle的實現 但請記住,此類身份驗證會在您的系統上創建用戶。 如果您不使用數據庫,則每次用戶發送請求時都必須向API發出請求。

首先,你需要明白沒有魔力。 在每個請求中,symfony都會檢查url是否與指定的防火牆之一匹配(請參閱secutity.yml)。 解雇你的監聽器可以在防火牆工廠中看到。 如果找到匹配項,則操作將切換到相應的AuthenticationListener 監聽器嘗試通過創建令牌來驗證憑證,該令牌被發送到AuthenticationProvider

$this->authenticationManager->authenticate(new UsernamePasswordToken($username, $password, $this->providerKey));

在AuthenticationProvider中

public function authenticate(TokenInterface $token) {
    ...
}

AuthenticationProvider嘗試通過UserProvider獲取用戶。 如果成功,Token存儲在會話中。 在后續請求中,ContextListener首先進入播放,檢查會話,提取令牌並將其發送到AuthenticationProvider類似。

一般而言,該計划看起來像這樣。 您可以找到更多信息來檢查Symfony Security組件的源代碼。

非常好的起點是UsernamePasswordFormAuthenticationListener 它只需要從請求中獲取登錄名和密碼,並制作最簡單的UsernamePasswordToken。

protected function attemptAuthentication(Request $request)
{
    ...
}

祝好運!

暫無
暫無

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

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