使用Javascript解码Facebook签名请求

时间:2014-03-01 01:37:59

标签: javascript json facebook

我正在尝试解码来自Facebook的签名请求。我尝试使用javascript使用下面的代码,但我不确定用于解码然后解析JSON响应的函数。我的Response对象是signed_request,它包含用户个人资料信息,如姓名,性别,电子邮件等。 我想做类似这样的页面在php中显示: (转到解析签名请求的部分) https://developers.facebook.com/docs/facebook-login/using-login-with-games/

   <script>
     $(document).ready(function () {    
       var signedRequest = $("h2").html();
       var data = signedRequest.split('.')[1];       
       data = JSON.parse(data);
       name = data.name;
       console.log(name);
     });

   </script>

 <body>
   <form id="form1" runat="server">
       <div>
        <% string name1 = Request.Params["signed_request"];%>
           <h2><%= name1 %></h2>
       </div>
   </form>
  </body>

2 个答案:

答案 0 :(得分:1)

根据facebook,我们需要:

  1. 将已签名的请求分为两部分,并用“。”表示。字符(例如238fsdfsd.oijdoifjsidf899)
  2. 从base64url解码第一部分-编码签名
  3. 从base64url解码第二部分-有效负载,然后解码生成的JSON对象

在JavaScript中解析base64url的一种方法是window.atob

FB.getLoginStatus(res => {
  console.log(res)
  const parts = res.authResponse.signedRequest.split('.')
  const signature = window.atob(parts[0])
  const payload = window.atob(parts[1])
  console.log(signature, JSON.parse(payload))
});

答案 1 :(得分:0)

签名请求是base64编码的(url安全的版本),你可以按照这里的php描述 - https://developers.facebook.com/docs/facebook-login/using-login-with-games/

如果您非常感兴趣,可以通过http://connect.facebook.net/en_US/all/debug.js搜索“sdk.SignedRequest”来了解如何在JS SDK中完成此操作。