使用Javascript OAuth 2.0 SDK更新签名请求

时间:2011-07-27 18:20:04

标签: facebook-c#-sdk

随着新Javascript SDK和OAuth 2.0的发布,我想知道是否可以在不重定向用户的情况下更新SignedRequest(和authtoken),因此我使用了以下方法。基本上,这是一种保持活力的方法,我的应用程序可以绕过令牌的2小时到期时间。

我的应用包括:

  1. 闪光前端+ Javascript
  2. 使用Facebook C#SDK的Web服务(asmx)
  3. 要更新已签名的请求,请执行以下操作:

    1. 我每20秒使用getTimeout()
    2. 调用FB.getLoginStatus
    3. 这将返回一个新的signedRequest
    4. 我更新了我的ajaxSetup,以便在每次调用我的服务器时都包含此参数。

      var signedRequest;
      function updateSignedRequest(_signedRequest) {
          signedRequest = _signedRequest;
          $.ajaxSetup({ data: { "signed_request": signedRequest} });
      }
      (function ensureAuth() {
          setTimeout(function () { checkAuth(); ensureAuth(); }, 20000);
      })();
      function checkAuth() {
          FB.getLoginStatus(handleResCallback, true);
      }
      function handleResCallback(res) {
          if (!res.authResponse) {
              handleNotConnected();
          } else {
              signedRequest = res.authResponse.signedRequest;
          }
      }
      
    5. 几个问题:

      我相信Facebook C#SDK会查看每个新请求的signed_request参数,而不是cookie。总是这样吗?

      此外,您可以在此方法中看到任何其他漏洞吗?

1 个答案:

答案 0 :(得分:0)

这可能不是用户的最佳方法。如果他们因任何原因已经注销或失败,您将需要通过弹出或重定向登录来处理它。这意味着他们将在随机时间中断他们正在做的事情 - 而不是等待让他们做一些需要认证的事情,然后提交登录等。你也可以订阅auth事件而不是每20秒检查一次。您可以在处理应用程序或退出时将handleNotConnected()设置为回调。或者,您可以阅读令牌的到期时间,并且只在到期时间过后才续订。