因此,我正在为我的网站开发我自己的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未启用此类端点。 –