Facebook Connect и ASP.NET
Я на шаге 8 обзора проверки подлинности, найденного здесь: http://wiki.developers.facebook.com/index.php/How_Connect_Authentication_Works
В частности, пользователь зарегистрировался в facebook через Facebook Connect, и их веб-сессия была создана. Как использовать утилиту разработчика facebook v2.0 (от ясности), чтобы получить информацию о пользователе. Например, я хотел бы получить имя и фамилию пользователя.
Примеры в документации ориентированы на приложения facebook, а это не так.
Update
Недавно Facebook опубликовал API-интерфейс Graph. Если вы не поддерживаете приложение, использующее Facebook Connect, вы должны проверить новейший API: http://developers.facebook.com/docs/
Ответы
Ответ 1
У меня было много проблем с выяснением того, как делать вызовы на стороне сервера, как только пользователь зарегистрировался в Facebook Connect. Ключ в том, что javascript Facebook Connect устанавливает куки файлы на клиенте после успешного входа в систему. Вы используете значения этих файлов cookie для выполнения вызовов API на сервере.
Запутанная часть смотрела на образец PHP, который они выпустили. Их API-интерфейс на стороне сервера автоматически заботится о чтении этих значений cookie и создании объекта API, который готов делать запросы от имени зарегистрированного пользователя.
Здесь приведен пример использования Facebook Toolkit на сервере после входа пользователя в систему с помощью Facebook Connect.
Код сервера:
API api = new API();
api.ApplicationKey = Utility.ApiKey();
api.SessionKey = Utility.SessionKey();
api.Secret = Utility.SecretKey();
api.uid = Utility.GetUserID();
facebook.Schema.user user = api.users.getInfo();
string fullName = user.first_name + " " + user.last_name;
foreach (facebook.Schema.user friend in api.friends.getUserObjects())
{
// do something with the friend
}
Utility.cs
public static class Utility
{
public static string ApiKey()
{
return ConfigurationManager.AppSettings["Facebook.API_Key"];
}
public static string SecretKey()
{
return ConfigurationManager.AppSettings["Facebook.Secret_Key"];
}
public static string SessionKey()
{
return GetFacebookCookie("session_key");
}
public static int GetUserID()
{
return int.Parse(GetFacebookCookie("user"));
}
private static string GetFacebookCookie(string name)
{
if (HttpContext.Current == null)
throw new ApplicationException("HttpContext cannot be null.");
string fullName = ApiKey() + "_" + name;
if (HttpContext.Current.Request.Cookies[fullName] == null)
throw new ApplicationException("Could not find facebook cookie named " + fullName);
return HttpContext.Current.Request.Cookies[fullName].Value;
}
}
Ответ 2
Я продолжил эту концепцию и написал полноценную статью, которая решает эту проблему в ASP.NET. См. Следующее.
Как получить данные пользователя из Facebook Connect в ASP.NET - Devtacular
Спасибо Калебту за хорошее начало в этом вспомогательном классе.
Enjoy.
Ответ 3
Facebook Connect действительно не слишком сложный, просто недостаток документации.
Поместите необходимый javascript отсюда: http://tinyurl.com/5527og
Подтвердите, что файлы cookie соответствуют подписи, предоставленной facebook, чтобы предотвратить взлом, см. http://tinyurl.com/57ry3s для объяснения того, как начать
Создайте объект api (Facebook.API.FacebookAPI)
На объекте api установите ключ приложения, а секретный Facebook предоставит вам при создании приложения.
Установите api.SessionKey
и api.UserId
из файлов cookie, созданных для вас из подключения facebook.
Как только это будет сделано, вы можете начать делать звонки в facebook:
Facebook.Entity.User user = api.GetUserInfo(); //will get you started with the authenticated person
Ответ 4
В приведенных ниже ответах отсутствует:
После успешного входа в систему Facebook рекомендует, чтобы вы подтвердили, что файлы cookie фактически являются законными и размещены на клиентской машине.
Вот два метода, которые можно использовать вместе для решения этой проблемы. Возможно, вы захотите добавить метод IsValidFacebookSignature в класс утилиты calebt. Заметьте, я тоже немного изменил метод GetFacebookCookie.
private bool IsValidFacebookSignature()
{
//keys must remain in alphabetical order
string[] keyArray = { "expires", "session_key", "ss", "user" };
string signature = "";
foreach (string key in keyArray)
signature += string.Format("{0}={1}", key, GetFacebookCookie(key));
signature += SecretKey; //your secret key issued by FB
MD5 md5 = MD5.Create();
byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(signature.Trim()));
StringBuilder sb = new StringBuilder();
foreach (byte hashByte in hash)
sb.Append(hashByte.ToString("x2", CultureInfo.InvariantCulture));
return (GetFacebookCookie("") == sb.ToString());
}
private string GetFacebookCookie(string cookieName)
{
//APIKey issued by FB
string fullCookie = string.IsNullOrEmpty(cookieName) ? ApiKey : ApiKey + "_" + cookieName;
return Request.Cookies[fullCookie].Value;
}
The SecretKey и ApiKey - это значения, предоставленные вам Facebook. В этом случае эти значения должны быть установлены, предпочтительно, из файла .config.
Ответ 5
Я проследил за замечательной статьей Билла и сделал этот маленький компонент. Он заботится о том, чтобы идентифицировать и проверить пользователя из файлов cookie Facebook Connect.
Facebook Connect Authentication для ASP.NET
Я надеюсь, что это поможет кому-то!
Приветствия,
Адам
Ответ 6
Вы также можете использовать SocialAuth.NET
Он обеспечивает аутентификацию, профили и контакты с помощью facebook, google, MSN и Yahoo с небольшими усилиями по разработке.
Ответ 7
Мои два цента: простой проект очень, использующий функцию "Войти с Facebook" - facebooklogin.codeplex.com
Не библиотека, но показывает, как все это работает.