2015-07-13 111 views
2

我實在無法找到一個明確的答案/方法存在以下問題/問題:獨立的後端(Symfony2中)和前端(AngularJS)REST - 如何驗證

我想有一個Symfony2的後端,可能與FOSRestBundle,它只返回JSON。前端將用AngularJS編寫。

用戶應該只能夠爲我的網站(選項#1)註冊/登錄的帳戶或登錄通過現有的OAuth帳戶,像谷歌或興(選項#2)。當然,認證應該/需要是無狀態的。

由於大多數如何在symfony中驗證RESTFul的例子完全在PHP中(所以即使後端和前端是分離的,前端仍然是PHP)我真的很難找出我如何實現上面的兩個選項。我對後端當前的想法是:

  • FOSRestBundle用於處理請求/響應
  • FOSUserBundle的註冊,登錄,密碼重置等,爲新用戶

我的問題是:

  1. 我該如何驗證一個普通用戶(FOSUserBundle)無狀態(選項#1)?在有關如何在單獨的前端使用FOSUserBundle的文檔中找不到任何內容。或者這種情況下是否有更好的捆綁?
  2. 如果用戶想通過OAuth2提供者(選項#2)驗證應用的哪部分(前端或後端)針對OAuthProvider(例如Google)進行身份驗證?我雖然關於在AngularJS中進行身份驗證(例如,通過oauth-ng模塊),獲取AuthToken並將其發送到後端,在那裏我將用戶與他的ID匹配(希望)從OAuthProvider獲得。

除了問題,如果這種做法是擺在首位正確的,我真的需要有關如何在symfony中實現這一目標的一些提示。我知道,可以在symfony(CustomUserProvicer,CustomAuthentication等)中定製幾乎任何東西,但在閱讀這些細節之前,可能已經有一種簡單的方法來解決我的問題。我的意思是,我不可能是唯一一個想要這個的人...

如果有什麼不清楚的地方,請問!

+0

我發現了這個,但我還沒有使用它:https://github.com/uecode/api-key-bundle我不確定它是否適合你的用例。 –

+0

這可能會幫助您開始使用無狀態/ oauth身份驗證(均已描述):http://symfony.com/doc/current/cookbook/security/api_key_authentication.html –

+0

鏈接很好,我知道它們,但是通過了解了很多再讀一遍。我的問題是,我錯過了「大畫面」。這些捆綁包在我的情況下如何一起工作(請參閱上文)。所以我真正需要知道的是兩種選項(「正常」和OAuth)的完整(註冊和登錄)方式:從AngularJS前端的請求開始,將不同的bundles/symfony部分返回到接收響應的前端。[像這樣](https://docs.google.com/drawings/d/1uTA7gQZ5IEV51Nv-HKR98sKWQNBUhEm0PPueJcoRW7c/edit)不太抽象,更具體到我的需求 – mcode

回答

2

我做了一個類似的API,這裏是我是如何做的:

我用FOSUserBundle打造的「原生」的用戶(那些只在您的網站)。爲了支持無狀態身份驗證,我使用了FOSOauthServerBundle,它可以使用FOSUserBundle的用戶提供程序。

然後,我添加兩個字段到我的用戶模型:

  • 一個整型字段名「原點」,其值表明該用戶是(0人,1爲Facebook,...)
  • 一個包含用戶的ID的外部帳戶,如果用戶不是天然的「外部ID」字符串字段,NULL別的

爲了使用戶與外部帳戶登錄,我使用的custom grant type,問作爲參數用於其上的客戶端側檢索外部帳戶(例如Facebook)的訪問令牌,即使用該訪問令牌以訪問帳戶信息,並做了以下:

  • 如果這是第一次用戶認證,在數據庫中創建一個新用戶,按照解釋的那樣設置origin和externalId字段並在數據庫中添加作爲名字,姓氏的帳戶信息。然後,它給出了API
  • 如果不是,它更新賬戶信息的訪問令牌,一旦用戶登錄,如果它在哪裏並不重要給出了API

這樣一個訪問令牌來自,但仍然可以被稱爲用戶來源領域。

如果您想了解更多詳細信息或配置有困難,請不要猶豫,在此處發表評論我很樂意提供幫助。