facebook-c # -sdk Windows Phone 7 Аутентификация - почему секрет? - PullRequest
3 голосов
/ 31 декабря 2011

Этот пост { AppSecret с Windows Phone 7 } указывает на то, что образец WP7 не использует AppSecret для входа в систему с Windows Phone, но текущий пример в загрузке 5.3.2 действительно использует секрет.

Однако, FacebookOAuthClient.cs генерирует исключения, если это не предусмотрено.Кроме того, http://blog.prabir.me/post/Facebook-CSharp-SDK-Writing-your-first-Facebook-Application.aspx показывает пример без использования AppSecret.

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

Не понимаю ли я руководство или есть какой-то способ аутентификации с помощью facebook-c # -sdk без использования секрета?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 31 декабря 2011

В WP 7.0 возникла проблема с Fragment в Url (все после усечения #).Facebook возвращает токен авторизации в Url Fragment, поэтому без него невозможно было аутентифицироваться как настольное / мобильное приложение.Решением было переключиться в веб-режим, где вы можете получить токен авторизации, если вы знаете AppSecret, поэтому это было единственное решение для этого (но с пробелами в безопасности).

В WP 7.1 FragmentUrl ошибка была закрыта, и теперь вы можете использовать обычный режим аутентификации (без AppSecret на клиенте).

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

Я понял, что проблема не в SDK, а в образце Windows Phone 7. В этом примере используется поток на стороне сервера. Изменения, необходимые для примера:

изменения:

loginParameters["response_type"] = "code";

до:

loginParameters["response_type"] = "token"; 

и удаление всей функции labda в webBrowser1_Navigated:
...

// The url is the result of OAuth 2.0 authentication.
if (oauthResult.IsSuccess)
  {
    var oauthClient = new FacebookOAuthClient { AppId = AppId, AppSecret = AppSecret };

    // we got the code here
    var code = oauthResult.Code;
   oauthClient.ExchangeCodeForAccessTokenCompleted +=
       (o, args) =>
       {
...

и заменил его следующим:

if (_fLoginMode && oauthResult.IsSuccess && !string.IsNullOrEmpty(oauthResult.AccessToken))
  {
      Dispatcher.BeginInvoke(() => NavigationService.Navigate(new Uri("/FacebookInfoPage.xaml?access_token=" + oauthResult.AccessToken, UriKind.Relative)));
  }

И, конечно же, удаление константы AppSecret

0 голосов
/ 31 декабря 2011

Если бы вы могли получить доступ ко всему моему без БЕЗ первого разрешения на авторизацию приложения (исключительно с использованием идентификатора приложения без токена доступа или секрета приложения), тогда это была бы ОГРОМНАЯ дыра в безопасности.Не только в моем профиле, но и в любом приложении, так как идентификатор приложения общедоступен.

Краткий ответ: для получения информации вам необходим токен доступа пользователя (или другой тип) или секретный ключ приложения.

...