Javascript Facebook如何验证Facebook连接请求?

Javascript Facebook如何验证Facebook连接请求?,javascript,facebook,api,sdk,Javascript,Facebook,Api,Sdk,因此,我正在为我的网站开发我自己的API——我正在模仿Facebook JS SDK来了解我的系统是如何工作的。API客户端显示一个按钮,弹出窗口出现,用户可以登录。登录弹出窗口向开启器窗口发出事件,父窗口现在知道用户已登录。这一切都有效 我很难理解的是他们如何验证刷新请求是否有效。如果API客户端需要向服务器发送一个请求,询问用户是否已登录并且全部在JS中,那么一切都是透明的。API客户端说,“嗨,我是应用程序4jhkk2l3bnm389,登录Facebook的用户是否也与我进行了身份验证?如

因此,我正在为我的网站开发我自己的API——我正在模仿Facebook JS SDK来了解我的系统是如何工作的。API客户端显示一个按钮,弹出窗口出现,用户可以登录。登录弹出窗口向开启器窗口发出事件,父窗口现在知道用户已登录。这一切都有效

我很难理解的是他们如何验证刷新请求是否有效。如果API客户端需要向服务器发送一个请求,询问用户是否已登录并且全部在JS中,那么一切都是透明的。API客户端说,“嗨,我是应用程序4jhkk2l3bnm389,登录Facebook的用户是否也与我进行了身份验证?如果是,你能给我发送一个新的令牌以便我可以进行API调用吗?”Facebook说,“哦,你是应用程序4jhkk2l3bnm389?是的,用户已登录并允许你访问他们的信息,这是一个访问令牌。”

但Facebook如何防止非真实应用程序的外部应用程序说:“嘿,我实际上是应用程序4jhkk2l3bnm389,我保证我没有撒谎。我可以拥有访问令牌吗?”

我不知道他们是如何决定差异的。显然,如果在现代浏览器中都是通过AJAX调用完成的,那么您可以只提供一个访问控制Allow Origin头。但是,如果一个恶意客户端使用cURL,那么我想我永远也分辨不出区别。Facebook是如何做到这一点的?一个好的解释是非常感谢!谢谢

Facebook使用身份验证。您可以在此处找到Facebook如何处理OAuth的详细信息:。OAuth有许多不同的使用方式,这取决于您是在移动设备上,还是在facebook.com上的网页本身,或者在您的情况下,只是facebook.com之外的网页。可在此处找到该最终流的详细信息:

基本上,Facebook知道您已授予哪些应用程序查看您的信息的权限。当你运行其中一个应用程序时,他们首先确保你登录到Facebook,然后从Facebook请求用户访问令牌,本质上说,“嘿,Facebook,我不认识这个人,我也不应该。我可以访问他们的信息吗?”。然后Facebook会在内部查看,如果它决定这个特定的应用程序应该可以访问这个用户的信息,它会发送一个用户令牌

这是描述它的简单方式。身份验证流程有很多不同的方式,这取决于请求来自哪种设备,这是否是facebook.com上的页面,等等,基本上取决于您的安全约束。最好阅读前面提到的Facebook身份验证文档以了解详细信息,因为它可能会变得非常棘手。

Facebook用于身份验证。您可以在此处找到Facebook如何处理OAuth的详细信息:。OAuth有许多不同的使用方式,这取决于您是在移动设备上,还是在facebook.com上的网页本身,或者在您的情况下,只是facebook.com之外的网页。可在此处找到该最终流的详细信息:

基本上,Facebook知道您已授予哪些应用程序查看您的信息的权限。当你运行其中一个应用程序时,他们首先确保你登录到Facebook,然后从Facebook请求用户访问令牌,本质上说,“嘿,Facebook,我不认识这个人,我也不应该。我可以访问他们的信息吗?”。然后Facebook会在内部查看,如果它决定这个特定的应用程序应该可以访问这个用户的信息,它会发送一个用户令牌


这是描述它的简单方式。身份验证流程有很多不同的方式,这取决于请求来自哪种设备,这是否是facebook.com上的页面,等等,基本上取决于您的安全约束。最好阅读前面提到的Facebook身份验证文档以了解详细信息,因为它可能会变得非常棘手。

所有访问令牌都属于应用程序/用户对,为了让Facebook将此类访问令牌返回到应用程序,必须对其进行验证

应用程序或客户端id根据重定向uri中指定的域进行验证-如果页面尝试使用它不拥有的客户端id/重定向uri对,那么它将不会收到访问令牌,因为这将传递给有效的重定向uri(JSSDK使用的机制遵循相同的规则)

当您登录时,将使用Facebook设置的cookie验证用户或uid


虽然可以使用curl轻松欺骗客户机id/重定向uri对,但这不适用于uid,因为您必须拥有用户cookie。如果是这种情况,那么你可以简单地授予你自己的应用程序访问权。

所有访问令牌都属于一个应用程序/用户对,为了让Facebook将这样的访问令牌返回到应用程序,必须对其进行验证

应用程序或客户端id根据重定向uri中指定的域进行验证-如果页面尝试使用它不拥有的客户端id/重定向uri对,那么它将不会收到访问令牌,因为这将传递给有效的重定向uri(JSSDK使用的机制遵循相同的规则)

当您登录时,将使用Facebook设置的cookie验证用户或uid


虽然可以使用curl轻松欺骗客户机id/重定向uri对,但这不适用于uid,因为您必须拥有用户cookie。如果是这样的话,那么您可以简单地授予您自己的应用程序访问权限。

我将查看这些链接,但我觉得您有点遗漏了我的问题-也许我的措辞不够好。最基本的问题是,如果脚本不需要客户端机密通过JSAPI进行身份验证,Facebook如何防止脚本欺骗应用程序ID