Обновление подписанного запроса с использованием Javascript OAuth 2.0 SDK - PullRequest
3 голосов
/ 27 июля 2011

С выпуском нового Javascript SDK и OAuth 2.0 мне стало интересно, возможно ли обновить SignedRequest (и authtoken) без перенаправления пользователя, поэтому я использовал следующий подход.По сути, это приложение для поддержки моего приложения, позволяющее обойти 2-часовое окно истечения срока действия токенов.

Мое приложение состоит из:

  1. Флэш-интерфейс + Javascript
  2. Веб-службы (asmx), использующие Facebook C # SDK

Чтобы обновить подписанный запрос, я делаю следующее:

  1. Каждые 20 секунд я звоню FB.getLoginStatus с использованием getTimeout ()
  2. Возвращает новый подписанный запрос
  3. Я обновляю свой 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;
        }
    }
    

Пара вопросов:

Я считаю, что SDK Facebook C # просматривает параметр signed_request при каждом новом запросе, а не cookie.Всегда ли так будет?

Кроме того, есть ли другие дыры, которые вы можете увидеть в этом подходе?

1 Ответ

0 голосов
/ 25 августа 2011

Возможно, это не лучший подход для пользователя. Если они вышли из системы или не прошли авторизацию по какой-либо причине, вам нужно будет обработать это, представив всплывающее окно или перенаправив их для входа в систему. Это означает, что они будут прерваны из-за того, что они делают в случайное время - вместо ожидания чтобы они делали что-то, что требует аутентификации, а затем представляет логин и т. д. Вы можете также подписаться на события аутентификации вместо проверки каждые 20 секунд. Вы сможете установить свой handleNotConnected () в качестве обратного вызова, когда они выйдут из приложения или выйдут из системы. Или вы можете прочитать время истечения токена и возобновить его только после истечения времени истечения.

...