Неверный подписанный запрос - PullRequest
2 голосов
/ 05 января 2012

У меня есть сайт, который использует Facebook API для входа в систему. Мы используем JS SDK и C # SDK.

Наш сайт работал нормально около месяца, но вчера вечером люди начали получатьпустые страницы при входе в систему.

Это также происходило один раз во время бета-тестирования, но мы решили, что это произошло из-за некоторых изменений, которые мы внесли в процесс входа в Facebook, и он исчез после того, как мы удалили наши куки.Но теперь это произошло снова, и я не могу попросить своих пользователей удалить их куки (для некоторых это кажется полезным, просто перезапустив браузер, хотя это все еще очень раздражает)

В моем журнале ошибок я вижуошибка, которая заключается в следующем:

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>

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012

Мы прекращаем поддержку анализа файлов cookie в SDK Facebook C #.Facebook больше не рекомендует разработчикам или SDK пытаться напрямую читать файлы cookie.Мы предоставим дополнительную документацию и рекомендации по этому вопросу в документации по Facebook C # SDK (http://docs.csharpsdk.org) в ближайшем будущем.

. Подробнее о рекомендации Facebook об отказе от использования файлов cookie см. Здесь: https://developers.facebook.com/blog/post/624/

0 голосов
/ 12 января 2012

Проблема, похоже, связана с избыточными файлами cookie от Facebook. Я разместил здесь вопрос о stackoverflow и отчет о проблеме на веб-сайте codeplex Facebook C # SDK , где я объясняю причину проблемы и показываю точное место в коде SDK, где исключение брошено. Надеюсь привлечь к себе внимание, потому что проблема довольно серьезная и, возможно, из-за реализации OAuth 2.0 в FB.

...