Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook graph api 从没有服务器的桌面客户端访问OAuth的正确方法_Facebook Graph Api_Google Chrome Extension_Oauth 2.0_Facebook Javascript Sdk_Facebook Oauth - Fatal编程技术网

Facebook graph api 从没有服务器的桌面客户端访问OAuth的正确方法

Facebook graph api 从没有服务器的桌面客户端访问OAuth的正确方法,facebook-graph-api,google-chrome-extension,oauth-2.0,facebook-javascript-sdk,facebook-oauth,Facebook Graph Api,Google Chrome Extension,Oauth 2.0,Facebook Javascript Sdk,Facebook Oauth,我正在开发一个扩展,它必须连接Facebook才能下载一些用户数据。我对OAuth舞蹈的细节有些陌生,并没有能够以期望的安全级别实现它。在当前的设置(有效)中,我担心不法分子劫持我的应用程序名称并使用它发布垃圾邮件 我尝试了许多不同的技术在我的扩展中实现OAuth(特别是使用Facebook登录)。当前设置使用 在沙盒选项卡中打开OAuth弹出窗口 将redirect_url设置为special(不需要配置的重定向url),将auth_令牌参数设置为返回auth_令牌,而不是临时代码 将java

我正在开发一个扩展,它必须连接Facebook才能下载一些用户数据。我对OAuth舞蹈的细节有些陌生,并没有能够以期望的安全级别实现它。在当前的设置(有效)中,我担心不法分子劫持我的应用程序名称并使用它发布垃圾邮件

我尝试了许多不同的技术在我的扩展中实现OAuth(特别是使用Facebook登录)。当前设置使用

  • 在沙盒选项卡中打开OAuth弹出窗口
  • 将redirect_url设置为special(不需要配置的重定向url),将auth_令牌参数设置为返回auth_令牌,而不是临时代码
  • 将javascript注入到特殊的重定向页面,该页面使用auth_标记向扩展发布消息
  • 这正如预期的那样有效。在用户通过弹出窗口授予我的应用权限后,我可以检索用户身份验证令牌

    我担心安全性,因为扩展没有存储密钥的服务器,也没有限制重定向URL和验证授权请求真实性的有效域。由于这个流程:黑客可以简单地将源代码下载到我的扩展,窃取Facebook应用程序ID,从他们自己的网站上为我的应用程序生成弹出窗口,并获得可以“通过”我的应用程序代表发布的auth_令牌

    更令人担忧的是,in扩展建议在扩展中嵌入您的consumer_secret。这似乎违反直觉

    我有理由相信这可以通过两种方式解决:

  • 创建我自己的服务器,作为我的扩展和Facebook之间的代理。我可以将重定向url设置到我的自定义域,在我的服务器上存储消费者机密,并在客户端和我自己的服务器之间定义一个狭窄的API
  • 将授权重定向限制为我的Chrome扩展ID(有点像Facebook iOS SDK使用应用商店捆绑标识的方式)。不幸的是,我无法将我的Facebook应用程序与Chrome扩展ID关联。它显示“无效URL”
  • 我更喜欢第二种选择,因为运行服务器可能成本高昂,并且会为扩展引入另一个故障点。用户还必须处理持有auth_令牌的“黑匣子”代码,这很糟糕

    有趣的是,Facebook似乎对ms app://URL(Windows 8应用程序)有特殊的例外。为什么不使用chrome扩展名://url

    所以我的问题是:这可能吗?我错过什么了吗?第二:我是不是对这种劫机袭击有点偏执?这看起来相当温和,但我宁愿不让黑客劫持我的应用程序的oauth对话框


    谢谢你,你的直觉是正确的。根据facebook的开发者文档:

    原因正是您所说的,即使是在已编译、模糊的字节码中,使用现代方法对应用程序机密进行反向工程也相当简单,即使您使用的是https


    这种情况下的最佳实践是使用托管api通过外部源代理所有登录,并将应用id和应用机密隐藏在单独的配置文件中。

    对,但使用Facebook的手动登录流和内部重定向url安全吗?这不需要应用程序机密。此外,有没有办法使用chrome扩展名://url作为重定向url?这是否安全?没有办法将chrome扩展url用作回调url。如果你仔细想想,这是很直观的。如果你给facebook的网址是chrome-extension://abcdefghijklmnopqrstuvwxyz/index.html ,这只在本地机器的上下文中才有意义,facebook将无法解析该地址并将其发送到任何有意义的地方。如果你愿意,你可以在一个随机的开放端口上启动一个服务器来监听facebook的响应,并将其用作回调url(注意,实际上不要这样做)。但是你会遇到防火墙、权限等仍然不安全的问题。一旦用户授予您的应用程序访问其数据的权限,作为开发人员,您有责任确保只有您的应用程序可以访问所述数据。只要你依赖任何形式的客户端身份验证,恶意用户就可以欺骗你的客户端请求,并使用你的应用程序凭据访问所述数据。Facebook肯定可以重定向到本地URL,如果是chrome扩展URL,这应该保证调用所需的扩展代码,因为Chrome扩展ID是由开发者的私钥生成的,并且是唯一的。黑客入侵Chrome浏览器超出了这个问题的范围。我担心的是允许Facebook在没有我自己服务器参与的情况下登录,这似乎会允许垃圾邮件发送者“通过”我的应用程序将邮件发送到受损的帐户。所有允许从“*”访问API的Facebook应用程序都会受到攻击。我打赌黑客们对此一无所知: