2012-12-19 71 views
2

我想我不完全理解Facebook OAuth-API處理身份驗證的方式。據我瞭解,它的工作原理基本上是這樣的(客戶端是一款Android手機,我的服務器標準的LAMP-設置): fb auth http://i.imagebanana.com/img/hvlsb2dp/fbAuth.png通過客戶端SDK進行Facebook身份驗證 - 安全概念

現在的問題是,客戶端可以通過提交當然假的步數3錯誤的用戶ID到我的服務器 - 例如,如果我的服務器響應請求http://server.com/getConfidentialData.php?fbID=%FBID%,並且用戶設法獲取其他人的fb-userID,他可以將其放入請求中,並且他將獲得屬於某人的數據其他。

如果我使用PHP-SDK,它如何知道我的用戶是否在Android應用程序中登錄?

這是它應該工作的方式,還是我錯過了什麼?

謝謝, David。

回答

0

我有完全相同的問題......和同樣的感覺,但既然你沒有任何答案,我會帶你到處找到我發現的東西。

我設計了以下解決方案:

我發送到我的服務器在FB用戶ID,他的電子郵箱(如,以確定他在我的服務器)和他的訪問令牌(一切都通過HTTPS,就好像它是一個特殊登錄電話)。

從我的服務器我嘗試訪問令牌,如果這個工程(*)我登錄&更新/註冊用戶在我的服務器。 (*)我定義的作品首先好像我可以訪問用戶電子郵件一樣,但隨後具有該權限的任何其他應用程序都可以模仿我的用戶,所以現在我擴展了令牌生命,只有在令牌出現我的應用程序

我希望這會有所幫助,同時,如果有人能夠真正解決這個問題並向我們解釋其他人如何避免這種情況,我會很感激。

乾杯!

+0

感謝您分享您的方法,但我真的不能想象,Facebook的人沒想到的東西更全面的 - 我的意思是,這是最核心的auth-問題,所以他們應該應該以優雅和安全的方式做到這一點。另一方面,如果我看他們的一團糟... – David

+0

@David我知道,這是一個3路驗證,所以Facebook服務器和客戶端需要彼此聯繫,但那種情況發生在任何一個三個情景Facebook顯示:https://developers.facebook.com/docs/concepts/login/login-architecture/我的意思是...要麼你不知道哪個客戶端通過Facebook在服務器端登錄名稱,或者你可以不要相信你的客戶說嘿!我已經通過Facebook用戶登錄,讓我進來!在cleint方面js sdk登錄...我的意思是,我的方法是唯一一個每一方都認證這件衣服......迄今爲止。我的路上有任何錯誤? – Daren

+0

通過使用服務器端登錄,然後通過Open-Graph-API(/ me對象)檢索用戶ID,在沒有任何Client-FB-Contact之後,他一次點擊'fb中的redirect_uri後, '官方'應用登錄表單?如果Web-View無法訪問標準瀏覽器的cookie或者用戶沒有在瀏覽器中登錄(我猜,這是一種明顯的缺點,那就是他每次在移動設備上啓動應用程序時都必須這樣做)大多數使用fb-App的人都沒有) – David

1

唯一真正的解決辦法:

你有私人用戶數據的服務器,而不是一切都在Facebook上,你需要做服務器端的登錄這是不難實現,一旦你理解了流的時刻。

檢查Facebook上的圖表,並按照他們在這個例子中提供的指導原則,你很好。

https://developers.facebook.com/docs/howtos/login/server-side-login/

相關問題