#c# #.net #facebook #facebook-authentication
#c# #.net #Facebook #facebook-аутентификация
Вопрос:
Я пишу .NET-приложение, которое запускается на компьютере с Windows. Он недоступен через браузер. Проблема в том, что я не могу аутентифицироваться должным образом. В настоящее время я пишу на C # .NET, более конкретно на C #.
- У меня есть веб-браузерный элемент управления в моей форме.
- Пользователь входит в facebook через этот элемент управления webbrowser.
- После входа в систему я запускаю процедуру аутентификации.
- Затем я восстанавливаю код.
Вот где все идет не так. С помощью этого кода я хочу получить токен доступа. Сгенерированный URL-адрес запроса выглядит следующим образом: https://graph.facebook.com/oauth/access_token?client_id=____MY_APP_ID______amp;redirect_uri=http://localhost/amp;client_secret=_____MY_APP_SECRET_____amp;code=____MY_RETREIVED_CODE_____
и выполняется с помощью приведенного ниже кода.
Пожалуйста, обратите внимание, что мой URL перенаправления http://localhost
. Это должно быть нормально, верно?
Кроме того, в настройках моего приложения у меня есть следующая информация.
URL сайта:
http://localhost/
Домен сайта: localhost
private String ExchangeCodeForToken(String code, Uri redirectUrl)
{
var TokenEndpoint = new Uri("https://graph.facebook.com/oauth/access_token");
var url = TokenEndpoint "?"
"client_id=" _AppID "amp;"
"redirect_uri=" redirectUrl "amp;"
"client_secret=" _AppSecret "amp;"
"code=" code;
var request = WebRequest.CreateDefault(new Uri(url));
using (var response = request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
using (var responseReader = new StreamReader(responseStream))
{
var responseText = responseReader.ReadToEnd();
var token = responseText.Replace("access_token=", "");
return token;
}
}
}
}
Когда я выполняю это, я получаю эту ошибку:
Исключение Webexception не было обработано пользовательским кодом, удаленный сервер вернул ошибку: (400) Неверный запрос.
Вот где, я думаю, я могу ошибаться:
- Верны ли настройки моего приложения?
- Должен ли мой URL-адрес перенаправления быть
http://localhost
, даже если на самом деле там нет службы, прослушивающей его?
Самое главное:
- как мне избавиться от этой ошибки и восстановить токен доступа?
Заранее спасибо!
Ответ №1:
Вы получаете эту ошибку, потому что вы не должны вызывать этот URL из настольного приложения: насколько я знаю, вы не можете использовать конечную точку токена для аутентификации настольного приложения. Кроме того, вы можете получить токен доступа напрямую (нет необходимости сначала запрашивать код). Вот что вам нужно сделать.
Загрузите следующий URL-адрес во встроенный веб-браузер :
https://www.facebook.com/dialog/oauth?
client_id=YOUR_APP_IDamp;
redirect_uri=https://www.facebook.com/connect/login_success.html
Пользователю будет предложено войти в систему, и он будет перенаправлен на этот URL с токеном доступа в URL :
https://www.facebook.com/connect/login_success.html#access_token=...
Таким образом, вы должны обнаружить перенаправление и извлечь токен доступа из URL.
Комментарии:
1. Миллион благодарностей! У меня была точно такая же проблема. Но как бы вы это сделали, если мое приложение работает на терминале? У меня, конечно, не может быть подходящего браузера. Подробнее: Я создаю KDE-Plasmoid для публикации статусов в Facebook account. У меня также не может быть встроенного браузера. Я использую Python. Лучший вариант использования браузера — использовать модуль Mechanize, если это поможет .. 🙂
2. Привет, Thrustmaster. Из-за потока oauth и по соображениям безопасности у вас нет возможности авторизовать пользователя на Facebook без браузера… Вы можете попытаться взломать браузер, имитируя работу с HTTP-запросами на Python, но я не уверен в этом. И вы будете запрашивать имя пользователя и пароль ваших пользователей, что нарушает Условия предоставления услуг Facebook.
3. Спасибо за ответ. Но даже во встроенном браузере я (Facebook) буду запрашивать имя пользователя / пароль. Если это мой браузер, я вполне могу получить имя пользователя и пароль, и это тоже без ведома пользователя.
4. Если вы используете встроенный браузер, у вас на руках не будет учетных данных пользователя, потому что он будет вводить их прямо на веб-сайте Facebook (за исключением, конечно, того, что вы прослушиваете нажатия клавиш). В любом случае, конечный пользователь не будет знать, прослушиваете ли вы его учетные данные или нет, он доверяет разработчику, вы можете делать все, что хотите. Дело не в том, что вы не можете , а в том, что вы не должны . Facebook не облегчит вам жизнь, если вы решите это сделать (без библиотек, без документации и т.д.)
5. Спасибо за ответ. 🙂 Я открываю новый вопрос, посвященный моей проблеме.
Ответ №2:
Спасибо, квинтен!
Однако мне удалось решить свою собственную проблему с помощью C # Facebook SDK. Этот набор для разработки программного обеспечения был действительно большим подспорьем!
В комплект входит множество образцов (включая авторизацию).
Любой, кто программирует на .NET с facebook, должен это проверить! Кодирование для facebook теперь стало намного проще.