-1

我和我的團隊正在開發一個相當大的項目。我們正在開發一個在線遊戲,目前可以通過兩種方式訪問​​: -Via是一個Web瀏覽器,一個應用程序完整的JavaScript(客戶端),完整的Ajax(基本上意味着UI將被管理在JS客戶端)。 -Via一個iPhone應用程序(用戶界面將由應用程序本身管理)。webservice身份驗證和用戶身份管理

在兩種不同的應用程序之間,核心邏輯保持不變,所以我相信(我可能是錯的),最好的解決方案是創建一個Web服務(如果可能,使用RESTful或Rest等標準)執行所有必要的操作。

遵循這個邏輯,我遇到了一個問題:用戶的身份驗證和身份管理。由於應用程序用戶需要進行身份驗證才能執行某些操作,因此這帶來了問題。

我已經研究過WS-security,但是這顯然需要將密碼存儲,在服務器上未加密,這是不可接受的! 然後我看着Oauth,但乍看之下,這似乎是很多工作的設置,並不是特別適合我的需求(應用程序必須被接受的方式不會讓我滿意,因爲這將是我的應用程序和我的應用程序只使用Web服務,而不是任何外部應用程序)。 我已經閱讀了許多其他方法來做我想做的事情,但說實話,我有點困惑,我不知道什麼信息是可靠的,什麼不可信。

我想說明的是,我將symfony2用於後端,jquery用於客戶端JavaScript。 此外,我想詳細的一步一步的迴應,因爲我真的很困惑我讀過的所有內容。

謝謝你的時間,我希望有人可以幫助我,因爲它非常緊迫。

晚上好

回答

0

我不能完全肯定這是否回答您的要求,但由於用戶界面將始終在客戶端進行處理,我想你可以使用無狀態的HTTP認證:

這是防火牆在security.yml

security: 
    firewalls: 
     api: 
      pattern: ^/api/ # or whatever path you want 
      http_basic: ~ 
      stateless: true 

然後這個想法基本上是在服務器上,你用你的普通用戶提供,編碼器和諸如此類的東西,以達到最大的安全性,並在客戶端上,您發送的HTTP認證頭,例如jQuery中:

$.ajax("...", { 
    username: "Foo", 
    password: "bar" 
}); 

請注意,由於該認證是無狀態(是有史以來沒有Cookie),頭必須與每個請求一起發送,但是,我想,因爲應用程序幾乎完全是客戶端,這不是問題。

您還可以檢查Symfony2 security manual以獲取有關如何設置HTTP身份驗證的更多信息。另外,請確保在您的ACL中強制使用HTTPS訪問,以便保護包含憑據的請求(您的ACL定義中爲requires_channel: https)。