【问题标题】:Invalid signed request无效的签名请求
【发布时间】:2012-01-05 11:42:04
【问题描述】:

我有一个使用 Facebook API 登录的网站。我们使用的是 JS SDK 和 C# SDK。

我们的网站已经运行了大约一个月,但昨晚人们在登录时开始出现空白页。

这在 Beta 测试期间也发生过一次,但我们认为这是因为我们在 Facebook 登录过程中进行了一些更改,并且在我们删除 cookie 后它消失了。但现在又发生了,我不能要求我的用户删除他们的 cookie(对于某些人来说,重启浏览器似乎有帮助,但仍然很烦人)

在我的错误日志中,我可以看到如下错误:

System.InvalidOperationException: Invalid signed request.
    at Facebook.FacebookSignedRequest.TryParse(String secret, String signedRequestValue, Int32 maxAge, Double currentTime, Boolean throws)
    at Facebook.FacebookSignedRequest.Parse(String secret, String signedRequestValue)
    at Facebook.FacebookSignedRequest.GetSignedRequest(String appId, String appSecret, HttpContextBase httpContext)
    at Facebook.FacebookSession.GetSession(String appId, String appSecret, HttpContextBase httpContext, FacebookSignedRequest signedRequest)
    at Facebook.Web.FacebookWebContext.get_Session()
    at Facebook.Web.FacebookWebContext.IsAuthenticated()
    at Facebook.Web.FacebookWebContext.IsAuthorized(String[] permissions)
    at Facebook.Web.Mvc.FacebookAuthorizeAttribute.OnAuthorization(AuthorizationContext filterContext, IFacebookApplication facebookApplication)
    at System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor)
    at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
    at System.Web.Mvc.Controller.ExecuteCore()
    at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
    at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5()
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

奇怪的是,它在同一时间发生在几个用户的晚上,我已经每天登录和退出页面大约一个月了,今天我只是得到一个空白页面,这个错误显示在记录。

显然它看起来与 cookie 或会话丢失有关。这似乎发生在那些没有退出 Facebook 的人身上,他们保持登录状态,然后稍后再回来,可能已经失去了他们的会话,当他们再次登录时,它就不起作用了。我不能 100% 确认它,但似乎错误发生在很多人身上他们又得到一个空白页面,所以他们转到登录页面,尝试登录,但登录后又得到一个空白页面。

所以你可以说这是导致错误的原因,但为什么它会在同一天发生在每个人身上,而不是偶尔发生在某个人身上?这对我来说没有意义。

注册 JS 如下所示:

<script>
window.fbAsyncInit = function () {
    FB.init({
        appId: 'XXXXXXXXXXXX',
        channelUrl: 'http://www.xxxxxx.com/channel.html',
        status: true, // check login status
        cookie: true, // enable cookies to allow the server to access the session
        oauth: true, // enable OAuth 2.0
        xfbml: true  // parse XFBML
    });

    // Run js that is dependent on the Facebook session
    initFacebook(); 

    FB.Canvas.setAutoResize();

};

// Load the SDK Asynchronously
(function (d) {
    var js, id = 'facebook-jssdk'; if (d.getElementById(id)) { return; }
    js = d.createElement('script'); js.id = id; js.async = true;
    js.src = "//connect.facebook.net/en_US/all.js";
    d.getElementsByTagName('head')[0].appendChild(js);
} (document));
</script>

任何帮助将不胜感激!

【问题讨论】:

标签: facebook session cookies facebook-c#-sdk facebook-login


【解决方案1】:

问题似乎与 Facebook 的冗余 cookie 有关。我已经发布了question here on stackoverflowissue report on Facebook C# SDK's codeplex website,我在其中解释了问题的原因,并在 SDK 代码中显示了引发异常的确切位置。希望引起一些关注,因为这个问题非常严重,可能是由于 FB 的 OAuth 2.0 实施。

【讨论】:

    【解决方案2】:

    我们将停止支持在 Facebook C# SDK 中解析 cookie。 Facebook 不再建议开发人员或 SDK 尝试直接读取 cookie。我们将在不久的将来在 Facebook C# SDK 文档 (http://docs.csharpsdk.org) 上提供更多文档和指导。

    在此处查看有关 Facebook 建议不使用 cookie 的详细信息:https://developers.facebook.com/blog/post/624/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 2017-03-29
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多