Хранение информации Facebook в ASP.NET: сессия, куки или личность? - PullRequest
3 голосов
/ 03 октября 2011

Итак, простой вопрос:

После того, как пользователь авторизует мое приложение (OAuth 2.0), я вызываю API Graph Facebook, чтобы получить их данные.

Итак, на данный момент у меня есть их Facebook ID, токен доступа для вызовов API, их электронная почта и некоторая другая основная информация.

Я работаю над веб-приложением ASP.NET MVC 3, которое использует проверку подлинности с помощью форм и пользовательский билет для хранения дополнительных данных.

Множество примеров, которые я видел, показали, что информация хранится в сессии.

Это мудро? Поскольку я работаю над системой единого входа (например, пользователи могут «войти» на мой сайт с помощью Facebook Connect), я действительно «забочусь» об их информации в Facebook, если они уже вошли на мой сайт.

Имея это в виду - мне интересно, стоит ли разделять информацию между различными механизмами персистентности.

Например, поскольку идентификатор Facebook не изменяется, я мог бы сохранить его в билете проверки подлинности с помощью форм и, возможно, сохранить маркер доступа в файле cookie, с истечением, установленным как истечение, полученное в ответе HTTP.

Как люди хранят информацию Facebook в приложении ASP.NET (MVC, но не ограничиваются этим)?

Ответы [ 4 ]

1 голос
/ 03 октября 2011

Не хранить информацию Facebook в сеансе.javascript SDK сохраняет для вас специальный файл cookie с именем fbsr_APP_ID с подписанным запросом, чтобы вы могли проверять все запросы к вашему серверу и получать необходимую информацию.Большинство вызовов API вы можете сделать из API JavaScript в Facebook.

Вы всегда можете проверить на любой странице вашего приложения, зарегистрирован ли пользователь с помощью FB.getLoginStatus
https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/

Если пользователь не вошел в систему, вы можете использовать FB.loginдля входа в систему: https://developers.facebook.com/docs/reference/javascript/FB.login/

Хранение информации в сеансах не масштабируется.Требуется память на вашем сервере и т. Д.

надеюсь, что это поможет

РЕДАКТИРОВАТЬ: Просто добавить к вышесказанному: не храните никакой информации, кроме uid и токена доступа в любом постоянном хранилище, основныеНапример, информация из графа API «я» может храниться в базе данных.Для нужд пользовательского интерфейса базовые вещи, такие как имя и изображение, могут быть созданы в пользовательском интерфейсе с помощью тегов и URL-адресов XFBML и т. Д. Javascript API также отвечает за сохранение файла cookie с подписанным подписью, который может быть проверен на сервере.

0 голосов
/ 16 октября 2011

Я решил использовать сочетание сеанса и билета проверки подлинности с помощью форм.

В заявке я сохраняю идентификатор Facebook пользователя, поскольку он не меняется.

Однако я такженеобходимо сохранить, если пользователь в настоящее время проходит аутентификацию в Facebook (просто базовый флаг) и токен OAuth.

Не имеет смысла сохранять эти данные в файле cookie, потому что если они вышли из Facebook илисрок действия маркера OAuth истекает, и мне придется либо обновить файл cookie, либо вывести его из проверки подлинности с помощью форм.

0 голосов
/ 03 октября 2011

Если вы создаете небольшой класс для хранения необходимых вам свойств Facebook, вы можете сериализовать его в строку в кодировке Base64 и сохранить ее в свойстве Roles билета FormsAuthentication (cookie).

0 голосов
/ 03 октября 2011

Вы можете положить все, что вы хотите в userData:

 var ticket = FormsAuthenticationTicket(int version, string name, DateTime issueDate,
    DateTime expiration, bool isPersistent, string userData, string cookiePath);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...