2012-12-02 136 views
0

我有一個應用程序,其中包括顯示用戶的Facebook帳戶的一些照片。我目前使用fb_graph gem來做到這一點(這是一個Ruby項目)。客戶端訪問access_token,使用Facebook圖

我可以得到的URL沒有問題,但我無法解決的是用戶是否能夠看到這些照片,顯示在我的頁面上,如果他們從他們的Facebook帳戶註銷。網址如下所示:http://sphotos-d.ak.fbcdn.net/hphotos-ak-prn1/<id>.jpg

雖然有一個明顯的解決方法。我可以將用戶訪問令牌附加到URL上,以便他們具有相同的權限來查看我的照片:``http://sphotos-d.ak.fbcdn.net/hphotos-ak-prn1/.jpg?access_token =`。

這樣的問題http://developers.facebook.com/docs/authentication/client-side/暗示它應該是客戶端使用access_token的最後一招,但我認爲我必須(因爲並非所有的照片都是公開的)。

而這個問題Facebook access token: server-side vs client-side flows說,因爲我得到令牌服務器端,它將持續60天。所以我想小心使用它。

兩個問題,然後:這將工作查看照片,並有沒有更好的方式,不公開access_token

+0

也很想知道我是否誤會了,實際上我根本不需要'access_token',只需顯示沒有它的圖像,我的用戶就可以看到它們。這在當地適用,但我想了解它是否能在生產中使用。 – Hbcdev

回答

0

不要在任何情況下將其在內容的任何URL的訪問令牌您的網頁上,或從第三方網站在拉任何資源將在來源標題

的URL你暴露用戶的訪問令牌從API檢索照片應該可以直接訪問而不需要訪問令牌

0

你能訪問https://sphotos-a.xx.fbcdn.net/hphotos-ash3/168119_10150146071831729_5116892_n.jpg嗎?我認爲你可以這樣做是因爲它在facebook上的cdn。你得到這個鏈接並不是偶然的。爲了達到這一步,您需要使用訪問令牌和「user_photos」權限訪問用戶的相冊和照片(您似乎已經在執行此操作)。

從技術上講,你應該罰款生產(除非Facebook更改其cdn網址,這似乎不太可能)。

編輯
忘了提。暴露用戶的訪問令牌並不是很好的做法(就像Igy提到的那樣)。 黑客仍需要您的應用程序ID和客戶端密碼才能使用訪問令牌執行惡意操作,但您不想冒不必要的風險。閱讀this問題了解更多詳情。

+0

我可以訪問該鏈接 - 你能解釋一下這證明什麼嗎?你是說那個URL是由你的access_token生成的臨時URL嗎?這張照片也可能只是一張公開照片,除非您可以擴展您的解釋。謝謝。 – Hbcdev

+0

1)這證明你可以訪問沒有令牌的fb cdn url。 2)該URL不是臨時的(直到fb改變了cdn位置)並且不會根據訪問令牌改變3)考慮專輯ID「451318416382」(這是我的個人私人相冊)。沒有我的訪問令牌,您無法直接訪問[https://graph.facebook.com/451318416382/photos]。現在考慮來自同一張專輯的照片[這裏](https://sphotos-b.xx.fbcdn.net/hphotos-prn1/s600x600/39788_451319376382_4181668_n.jpg)。你可以訪問它嗎?這證明你不需要訪問令牌來訪問fb cdn中的url,如果你有鏈接的話。 –

+0

攻擊者只需訪問令牌就可以造成損壞;做**不**在任何情況下都有訪問令牌的文檔來源 – Igy

0

我還沒有正確理解這個問題。

對於像這樣的資源:http://sphotos-d.ak.fbcdn.net/hphotos-ak-prn1/blah它們是靜態URL,它們不會每時每刻都在改變,並且它們不需要訪問令牌供其他人查看。你將需要一個access_token來獲取網址。

客戶端生成的令牌有效期爲60天或被稱爲「擴展到期訪問令牌」,並且顯然must not會通過暴露令牌來威脅用戶的安全。

我想念你的問題的任何部分?