Facebook Connect (C # SDK) - Как узнать, прошел ли пользователь аутентификацию в FB, но не форсируют? - PullRequest
2 голосов
/ 01 апреля 2011

Я реализую единый вход между Facebook Connect и моим веб-сайтом ASP.NET MVC 3, используя Facebook C # SDK.

Теперь часть единого входа:

Если пользователь прошел проверку подлинности на Facebook, но не на моем веб-сайте, проверьте, подключены ли они к моей системе, и, если это так, выполните единый вход (с помощью проверки подлинности с помощью форм).

Теперь я не знаю, как «проверить, аутентифицирован ли пользователь».Я использую OAuth для аутентификации на стороне сервера, поэтому я не хочу заставлять их входить через страницу входа, просто тихая проверка.Если они не аутентифицированы, я ничего не буду делать - я просто подожду, пока они нажмут кнопку «Подключиться к Facebook».

Мы можем сделать это с помощью JavaScript API - можем ли мы сделать это на сервере -сторона?

Я в основном хочу эквивалент FB.getLoginStatus через Graph API.

Конечно, должен быть способ на стороне сервера -по крайней мере, если не через Graph API, старый API REST или FQL?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

После нескольких дней охоты по сети, включая Graph API, старый REST API, FQL и т. Д. - кажется, SDK JavaScript является единственным, который позволяет эту информацию без предварительного токена доступа.

Поэтому мне пришлось использовать JavaScript SDK:

<div id="fb-root"></div>
<script type="text/javascript">
    window.fbAsyncInit = function () {
        FB.init({ appId: 'xxxxxxx', status: true, cookie: false, xfbml: false
        });
        FB.getLoginStatus(function (response) {
            if (response.session)
                window.location = '/Facebook/LogOn'
        });
    };
    (function () {
        var e = document.createElement('script');
        e.async = true;
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        document.getElementById('fb-root').appendChild(e);
    } ());
</script>

По сути, сначала я загружаю API JS асинхронно, чтобы избежать блокировки.

Затем я вижу, есть ли у пользователя сеанс Facebook.Если они это сделают, я перенаправляю на мой FacebookController, который выполняет перенаправление OAuth (которое сразу же вернется с токеном - поскольку они уже авторизованы), и затем устанавливает мой собственный файл cookie.

Затем включается мой глобальный фильтр действий, он видит, что есть cookie, и регистрирует пользователя. Отлично.

Обратите внимание, что у меня есть cookie: false - это потому, что я отслеживаю свои собственные куки для OAuthтокен и идентификатор FB.

0 голосов
/ 01 апреля 2011

Вы можете (ab) использовать коды состояния HTTP, чтобы найти эту информацию о Facebook, методика описана здесь

https://grepular.com/Abusing_HTTP_Status_Codes_to_Expose_Private_Information

...