所以我正在为我的网站开发我自己的 API——我在模仿 Facebook JS SDK 来了解我的系统是如何工作的。API客户端显示一个按钮,弹出窗口,用户可以登录。登录弹出窗口向打开窗口发出一个事件,父窗口现在知道用户已登录。一切正常。
我无法理解的是他们如何验证刷新请求是否有效。如果 API 客户端需要向服务器发送请求,询问用户是否登录并且都是 JS 中的,那么一切都是透明的。API 客户端说:“您好,我是应用程序 4jhkk2l3bnm389,登录 Facebook 的用户是否也通过了我的身份验证?如果是,您可以给我发送一个新令牌,以便我可以进行 API 调用吗?” Facebook 说:“哦,你是应用程序 4jhkk2l3bnm389?是的,用户已登录并允许你访问他们的信息,这是一个访问令牌。”
但是 Facebook 如何防止不是真实应用程序的外部应用程序说:“嘿,我实际上是应用程序 4jhkk2l3bnm389,我保证我没有撒谎。我可以有一个访问令牌吗?”
我不知道他们如何确定差异。显然,如果这一切都是通过现代浏览器中的 AJAX 调用完成的,那么您只需提供一个 Access-Control-Allow-Origin 标头即可。但如果恶意客户端使用 cURL,那么我认为我永远无法区分。脸书是如何做到的?非常感谢一个很好的解释!谢谢!