2012-05-31 158 views
1

我正在嘗試構建一個Facebook應用程序,以便不必構建自己的Facebook身份驗證。所以在Facebook認證他們並提供給我他們的user_id後,我可以簡單地將其存儲在他們的數據庫中。使用signed_request進行facebook身份驗證

顯然,我想保護我的用戶免受純粹使用他們的user_id欺騙。以下是我想出了:

  1. 不是傳遞的USER_ID來回瀏覽器和我的服務器之間的,我會通過signed_request,因爲這不能不知道我app_secret
  2. 爲了保護這從被欺騙被嗅探和重新使用,我會將我的請求封裝在SSL(HTTPS)中
  3. 爲了防止使用過時的signed_requests,我將確保issued_at是相對最新的。

這是sign_request的意義的一部分,還是有更正確的方式來使用Facebook身份驗證?

我的方法有什麼明顯的問題?

謝謝!

+0

在客戶端/服務器之間交換數據會更簡單,只需讓客戶端自己進行身份驗證,然後服務器就自己進行身份驗證,這樣每一方都擁有自己的令牌並獲取查詢需要的信息。 –

+0

嗯,我一直在關注[this](https://developers.facebook.com/docs/guides/web/#login)方法,因爲它似乎使用JavaScript SDK是執行Facebook身份驗證的最簡單方法。 如果客戶端執行身份驗證,我仍然需要一些傳遞給服務器的驗證身份,我想知道signed_request是否適合這個。 你是否建議完全使用[服務器端身份驗證](https://developers.facebook.com/docs/authentication/server-side/)或者有什麼我在這裏丟失? – integsrtite

+0

是的,我建議使用服務器端身份驗證,它真的不復雜,並且,我認爲,您可以在**之前擁有經過身份驗證的用戶**,甚至可以將html輸出發送回給他,從而使您可以更好地控制事物。看看[如何安全地將Facebook ID從客戶端傳遞到服務器](http://stackoverflow.com/questions/10738068/how-to-pass-facebook-id-from-client-to-server-securely)。 –

回答

0

這是驗證用戶的合理方式。我想你已經涵蓋了繞過認證系統的所有可能的方式,所以你不應該有問題。

如果您試圖進行API調用,您還應該使用FB.getLoginStatus()函數爲已登錄到應用程序的用戶個性化體驗。