【问题标题】:Decode Facebook signed request using Javascript使用 Javascript 解码 Facebook 签名的请求
【发布时间】:2014-03-01 01:37:58
【问题描述】:

我正在尝试解码来自 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>

【问题讨论】:

  • 谁能帮我解决这个问题?
  • 签名请求是base64编码的(一个url安全的版本),你可以按照这里的php描述-developers.facebook.com/docs/facebook-login/…
  • 嘿,您是否设法解码签名请求?你能告诉我怎么做吗?谢谢

标签: javascript json facebook


【解决方案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))
});

【讨论】:

    【解决方案2】:

    签名请求是 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 中这是如何完成的。

    【讨论】:

    • 谢谢。 js文件帮助我理解了如何解码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2015-04-04
    相关资源
    最近更新 更多