Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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';s在Ruby/Sinatra中签名的请求_Ruby_Json_Facebook_Sinatra_Base64 - Fatal编程技术网

破解Facebook';s在Ruby/Sinatra中签名的请求

破解Facebook';s在Ruby/Sinatra中签名的请求,ruby,json,facebook,sinatra,base64,Ruby,Json,Facebook,Sinatra,Base64,由于Facebook不推荐新的FBML,我正在寻找一种新的方法来创建一个“显示”选项卡(一个页面选项卡,向粉丝显示一个版本,向非粉丝显示另一个版本)。Facebook已将数据添加到已签名的请求中: 当用户在中选择您的应用程序时 左侧菜单,应用程序将收到 已签名的_请求参数包含一个 附加参数、页面、JSON 数组,其中包含 Facebook页面您的选项卡是托管的 其中,一个布尔值('liked'),表示 用户是否喜欢 页和布尔值('admin') 指示用户是否正在使用 页面的“管理员”以及 用户信

由于Facebook不推荐新的FBML,我正在寻找一种新的方法来创建一个“显示”选项卡(一个页面选项卡,向粉丝显示一个版本,向非粉丝显示另一个版本)。Facebook已将数据添加到已签名的请求中:

当用户在中选择您的应用程序时 左侧菜单,应用程序将收到 已签名的_请求参数包含一个 附加参数、页面、JSON 数组,其中包含 Facebook页面您的选项卡是托管的 其中,一个布尔值('liked'),表示 用户是否喜欢 页和布尔值('admin') 指示用户是否正在使用 页面的“管理员”以及 用户信息数组

我能够很好地读取签名的_请求,但是我需要使用base64url解码来处理它,以获得正确的JSON。此外,我在研究中发现,JSON对于Ruby的格式不正确,因此需要在解码之前对其进行修改。以下是当前代码(我现在正在index.erb中打印已签名的请求):


我试图让应用程序尽可能轻,避免使用完整的Facebook库,因为这不是一个完整的应用程序(只是一个标签),也不需要用户的任何额外权限。对于我检测风扇的方法,欢迎提出任何建议。

我以前遇到过这种情况。您只需在有效负载字符串的末尾添加
=
标记,直到其长度可被4整除

这将有助于:

payload += '=' * (4 - payload.length.modulo(4))

(我不确定Facebook在哪里/是否记录了这一点,但2011年初IRC上有人告诉我,果然,我在各种Facebook客户端库的源代码中发现了这种填充)

我使用fbgraph库,它有工作方法

多尔基图德的回答是正确的。我只是遇到了同样的问题,用“=”填充它就行了

您可以通过以下方式进行验证:

Base64.strict_decode64( invalid_payload )
=> ArgumentError: invalid base64

这似乎很接近,但不正确。您只希望填充1或2个字符,而不希望填充3或4个字符。e、 g.如果有效载荷模块(4)为零,则不要pad。注意:如果使用strict_decode64或urlsafe_decode64,则使用四个“=”填充似乎会中断,但decode64可以容忍。
Base64.strict_decode64( invalid_payload )
=> ArgumentError: invalid base64