Консольные приложения и расширенное разрешение offline_access workflow - PullRequest
0 голосов
/ 30 мая 2011

Я пытаюсь заставить Facebook C # SDK работать с offline_access и консольным приложением.

Из того, что я понимаю, я должен:

  1. Запросить авторизацию для offline_access - это просто.
  2. Получить «код», который возвращается FB, когда пользователь авторизует offline_access
  3. Используйте ExchangeCodeForAccessToken, чтобы каждый раз получать действительный токен доступа

Хотя я не могу понять, как получить код в (2)?

Спасибо

Ответы [ 2 ]

0 голосов
/ 31 мая 2011

После того, как пользователь предоставит вам разрешение «offline_access», Facebook перенаправит пользователя на URL вашего приложения с параметром строки запроса «code».Вам нужно получить этот параметр строки запроса «code».

Затем создайте еще один WebRequest, используя это значение «code», чтобы получить токен доступа.Используйте следующий URL для выполнения запроса:

https://graph.facebook.com/oauth/access_token?client_id={0}&redirect_uri={1}&client_secret={2}&code={3}

WebResponse может быть проанализирован следующим образом:

NameValueCollection qs = HttpUtility.ParseQueryString(response);
token = qs["access_token"];

Вам необходимо сохранить токен в базе данных для использования в консольном приложении..

0 голосов
/ 30 мая 2011

Получение «кода» и обмен кода на токен - это то, что вы обычно делаете, когда выполняете аутентификацию в рабочем процессе на стороне сервера. Это может быть немного красной сельди в вашем сценарии. Есть более простые способы получить токен доступа напрямую.

Было бы полезно иметь больше контекста (включая код), показывающего, как вы получаете offline_access (javascript, OAuth на стороне сервера, ...?)

Когда вы получаете offline_access через Javascript SDK, который, по моему мнению, обеспечивает лучший пользовательский опыт, вы получите токен доступа в ответе от Facebook:

FB.login(function (response) {
    if (response.session) {
        if (response.perms) {
            var accesstoken = response.session.access_token;
            // do something with the token...save it, use it, etc.
        } else {
            // re-prompt for permissions
        }
    } 
}, { perms: 'offline_access' });

Как только у вас есть это в javascript, вы можете вставить его в скрытое поле формы, поместить его в сообщение ajax на ваш сервер или что-то еще.

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

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

...