Подключение Facebook и ASP.NET

45
задан ckarbass 25 April 2010 в 21:42
поделиться

5 ответов

Я испытал много затруднений, выясняющих, как выполнить серверные вызовы, как только пользователь вошел в систему с Подключением Facebook. Ключ - то, что Подключение Facebook, JavaScript устанавливает cookie на клиенте однажды, существует успешный вход в систему. Вы используете значения этих cookie для выполнения вызовов API на сервере.

запутывающая часть смотрела на образец PHP, который они выпустили. Их серверный API автоматически заботится о чтении этих значений cookie и установке, API возражает, что это готово выполнить запросы от имени зарегистрированного пользователя.

Вот пример с помощью Инструментарий Facebook на сервере после того, как пользователь вошел в систему с Подключением Facebook.

Серверный код:

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;
    }
}
23
ответ дан bkaid 26 November 2019 в 21:21
поделиться

Подключение Facebook на самом деле не является слишком трудным, существует только отсутствие документации.

Помещенный необходимый 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
13
ответ дан slugster 26 November 2019 в 21:21
поделиться

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

, Как Получить Пользовательские Данные из Подключения Facebook в ASP.NET - Devtacular

Благодаря Calebt для хорошего начала на том классе помощника.

Обладают.

15
ответ дан Bill Konrad 26 November 2019 в 21:21
поделиться

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

После успешного входа в систему Facebook рекомендует проверить, действительно ли файлы cookie являются допустимыми и размещены ими на клиентском компьютере.

] Вот два метода, которые можно использовать вместе, чтобы решить эту проблему. Возможно, вы захотите добавить метод IsValidFacebookSignature в класс Utility 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.

8
ответ дан 26 November 2019 в 21:21
поделиться

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

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

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

Ура,

Адам

6
ответ дан 26 November 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: