2011-08-31 298 views
0

我正在玩Facebook Connect,試圖在我的網站上使用Facebook作爲手段或身份驗證。目前我的工作流程看起來是這樣的:Facebook訪問令牌問題

  • 轉到URL
  • 服務器檢查的cookie的accessToken
  • 如果的accessToken存在,會自動在評論框的用戶名/資料圖片填充,並留下的accessToken在隱藏輸入
    • 發送頁面提交,驗證訪問令牌(這是用表格的其餘部分提交)到客戶端
    • 是一個真實的人有效的訪問令牌。如果是這樣,添加註釋,以數據庫
    • 刷新頁面,以顯示新的數據
  • 如果沒有訪問令牌,與<fb:login-button>更換用戶名/資料圖片,與所需的<script>小號一起。
    • 頁發送到客戶端
    • 當用戶授權頁/登錄到Facebook上,刷新頁面
    • (回頂,但這次訪問令牌應該存在)

所以我有幾個問題:

  • 這種事情安全嗎?我正想着如果沒有Facebook的雙重身份驗證(在頁面生成時檢查一次並再次檢查評論提交),我將能夠做到這一點,並且我無法用其他任何方式來維護自己的會話狀態每個客戶。這值得嗎?

  • 是否訪問令牌到期時,我退出的Facebook?我在想它應該,但我似乎可以繼續使用相同的訪問令牌來抓取數據(即名稱,網址等),手動訪問Facebook並註銷自己。是因爲我只是要求公開信息,只有更多侵入性權限在註銷時到期?

  • 鑑於每個想做某事的人都必須從Facebook提供一個獨特的令牌,這應該有阻止CSRF的副作用,因爲每個動作都可以追蹤到一個有效的Facebook帳戶。是對的嗎?

回答

2

爲什麼你不使用Facebook的JavaScript SDK來檢測他們目前是否登錄到Facebook?這也將使JavaScript中的訪問令牌可用,以便您可以對API進行客戶端調用。 您也可以通過Facebook設置的會話cookie訪問相同的訪問令牌服務器端。

+0

主要原因是,無論好壞,我希望儘可能多地在服務器端做這些事情。因此,在向Facebook進行調用之後,我並不需要大量的JavaScript在客戶端執行DOM操作,我只想將身份驗證(在這種情況下是訪問令牌)傳遞給服務器,讓服務器執行所有操作思考並讓它在第一次嘗試中吐出正確的(定製的)頁面。我真的不喜歡javascript DOM操作;任何不平凡的事情都會讓人感到困惑。 –

+1

一旦Facebook的Javascript SDK設置了cookie,Facebook的PHP SDK就可以獲取相同的會話(通過cookie) - 然後您可以從PHP SDK(或者使用Python或您使用的任何服務器端語言)進行所有API調用 - 應該不需要自己手動傳遞訪問令牌 – Igy

2

我不能回答你所有的問題,但我可以告訴你,在你的頁面上的隱藏字段的訪問令牌是從政策角度的風險,特別是如果你的頁面可以通過任何第三方閱讀第四方代碼,如Google Analytics或AdSense。 Facebook會因此泄漏用戶識別數據給第三方。 Facebook用戶標識以純文本格式存在於訪問令牌中。 Facebook有自動化的流程掃描這些東西,並會自動禁止你的應用程序,如果它泄漏給第三方使用。

+0

嗯,但不是已經在cookie中的訪問令牌,並且不能有任何第三方誰可以抓住HTML我看到也抓住cookie?我想,將訪問令牌留在HTML之外並且讓服務器在每個請求中檢查cookie都沒有任何意義。 –

+1

第三方將無法訪問cookie - 只有您的用戶才能訪問他們自己的cookie – Igy