Facebook Connect и ASP.NET - PullRequest
       19

Facebook Connect и ASP.NET

45 голосов
/ 27 ноября 2008

Я на шаге 8 обзора аутентификации, найденного здесь: http://wiki.developers.facebook.com/index.php/How_Connect_Authentication_Works

В частности, пользователь вошел в Facebook через Facebook Connect, и его веб-сеанс был создан. Как использовать набор инструментов разработчика Facebook v2.0 (для ясности), чтобы получить информацию о пользователе. Например, я хотел бы получить имя и фамилию пользователя.

Примеры в документации направлены на приложения Facebook, а это не так.

Обновление

Facebook недавно выпустила Graph API. Если вы не поддерживаете приложение, которое использует Facebook Connect, вы должны проверить последнюю версию API: http://developers.facebook.com/docs/

Ответы [ 7 ]

23 голосов
/ 16 декабря 2008

У меня было много проблем с выяснением того, как выполнять вызовы на стороне сервера после входа пользователя в Facebook Connect. Ключевым моментом является то, что JavaScript Connect Facebook устанавливает файлы cookie на клиенте после успешного входа в систему. Значения этих файлов 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;
    }
}
15 голосов
/ 01 марта 2009

Я развил эту концепцию и написал полноценную статью, которая решает эту проблему в ASP.NET. Пожалуйста, смотрите следующее.

Как получить данные пользователя из Facebook Connect в ASP.NET - Devtacular

Спасибо Калебту за хорошее начало в этом классе помощников.

Наслаждайтесь.

13 голосов
/ 02 декабря 2008

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 connect.

Как только это будет сделано, вы можете начать звонить на Facebook:

Facebook.Entity.User user = api.GetUserInfo();   //will get you started with the authenticated person
8 голосов
/ 03 июня 2009

Это отсутствует в ответах, перечисленных до сих пор:

После успешного входа в систему 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;
    }

SecretKey и ApiKey - это значения, предоставленные вам Facebook. В этом случае необходимо установить эти значения, предпочтительно из файла .config.

6 голосов
/ 01 июля 2009

Я последовал за замечательной статьей Билла и сделал этот маленький компонент. Он заботится об идентификации и проверке пользователя с помощью файлов cookie Facebook Connect.

Аутентификация Facebook Connect для ASP.NET

Надеюсь, это кому-нибудь поможет!

Приветствия

Адам

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

Вы также можете использовать SocialAuth.NET

Он обеспечивает аутентификацию, профили и контакты с Facebook, Google, MSN и Yahoo с минимальными усилиями по разработке.

1 голос
/ 12 апреля 2011

Мои два цента: очень простой проект, использующий функцию «Войти через Facebook» - facebooklogin.codeplex.com

Не библиотека, но показывает, как все это работает.

...