因此,我正在爲我的網站開發我自己的API--我模仿Facebook JS SDK關於我的系統如何工作。 API客戶端顯示一個按鈕,彈出窗口出現,用戶可以登錄。登錄彈出窗口向開啓者窗口發出一個事件,父窗口現在知道用戶已登錄。這一切都有效。Facebook如何驗證Facebook連接請求?
我難以理解的是他們如何驗證刷新請求是否有效。如果API客戶端需要向服務器發送請求以詢問用戶是否已登錄並且全部使用JS,那麼一切都是透明的。 API客戶端說:「嗨,我是應用程序4jhkk2l3bnm389,是在Facebook上登錄的用戶,並且已通過身份驗證?如果是這樣,您可以向我發送新令牌,以便我可以調用API調用嗎?」 Facebook說:「哦,你是應用程序4jhkk2l3bnm389?是的,用戶已經登錄並允許你訪問他們的信息,這裏是一個訪問令牌。」
但如何防止Facebook的外部應用程序不是可信的應用程序從說:「嘿,I'M實際應用4jhkk2l3bnm389,我發誓我沒有說謊,我能有一個訪問令牌?」
我不知道他們如何確定差異。顯然,如果全部都是通過現代瀏覽器中的AJAX調用完成的,那麼您可以提供Access-Control-Allow-Origin標頭。但是如果一個惡意的客戶使用cURL,那麼我認爲我無法分辨這個區別。 Facebook如何做到這一點?非常感謝一個很好的解釋!謝謝!
非常感謝你。所以我想最好的方法是讓API客戶端在他們的服務器上設置一個「刷新cookie」,以某種方式表示用戶。當用戶重新加載頁面時,客戶端會檢查該cookie是否存在。如果確實如此,它會重定向到auth網關,然後使用標記重定向到回調頁面(前提是刷新cookie是正確的。)對我有意義!非常感謝。 – lwansbrough
其實通過這個邏輯,我可以通過AJAX做到這一點,然後我不能嗎?當用戶授權客戶端時保存刷新cookie,在每次頁面加載時調用它,並在每次加載頁面時更改它。 – lwansbrough
@iLoch通過AJAX做什麼? XMLHttpRequest與瀏覽器的其他部分採用相同的同源策略,CORS未啓用此類端點。 –