45 votes

Facebook Connect et ASP.NET

Je suis à l'étape 8 de la vue d'ensemble d'authentification trouvé ici: http://wiki.developers.facebook.com/index.php/How_Connect_Authentication_Works

En particulier, l'utilisateur s'est connecté à facebook via Facebook Connect et de leur session web a été créé. Comment puis-je utiliser le facebook developer toolkit v2.0 (à partir de clarté afin de récupérer des informations sur l'utilisateur. Par exemple, j'aimerais obtenir de l'utilisateur du prénom et du nom.

Exemples dans la documentation sont orientées vers facebook applications, ce qui ne l'est pas.

Mise à jour

Facebook a récemment publié l'API Graphique. Sauf si vous êtes le maintien d'une demande qui est à l'aide de Facebook Connect, vous devez vérifier la dernière version de l'API: http://developers.facebook.com/docs/

23voto

calebt Points 802

J'ai eu beaucoup de mal à trouver comment faire côté serveur appelle une fois qu'un utilisateur a ouvert une session avec Facebook Connect. L'essentiel est que le Facebook Connect javascript ensembles de cookies sur le client une fois qu'il y a une connexion réussie. Vous utilisez les valeurs de ces cookies pour effectuer des appels de l'API sur le serveur.

La confusion de la partie a été à la recherche à l'PHP échantillon, ils ont publié. Leur API côté serveur automatiquement prend en charge la lecture de ces valeurs de cookie et mise en place d'une API objet qui est prêt à faire des demandes au nom de l'utilisateur connecté.

Voici un exemple d'utilisation de l' Facebook Trousse d'outils sur le serveur une fois que l'utilisateur a ouvert une session avec Facebook Connect.

Code serveur:

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
}

Utilitaire.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;
    }
}

15voto

Bill Konrad Points 289

J'ai suivi sur ce concept et a écrit à part entière un article qui permet de résoudre ce problème en ASP.NET. Veuillez voir le suivant.

Comment faire pour Récupérer les Données des Utilisateurs de Facebook se Connecter en ASP.NET - Devtacular

Grâce à Calebt pour un bon démarrage à l'aide de la classe.

Profitez de.

13voto

ckarbass Points 1629

Facebook Connect n'est pas trop difficile, il y a juste un manque de documentation.

Mettre le code javascript nécessaire à partir d'ici: http://tinyurl.com/5527og

Valider les cookies correspondre à la signature fournie par facebook pour prévenir le piratage, voir: http://tinyurl.com/57ry3s pour une explication sur la façon de commencer

Créer un objet api (Facebook.L'API.FacebookAPI) Sur l'api objet, définissez la clé d'application et secret Facebook vous offre lorsque vous créez votre application. Ensemble api.SessionKey et api.UserId de l'cookies créés pour vous à partir de facebook se connecter.

Une fois que c'est fait, vous pouvez commencer à faire des appels à facebook:

Facebook.Entity.User user = api.GetUserInfo();   //will get you started with the authenticated person

8voto

nikmd23 Points 5780

Cela est manquant dans les réponses répertoriées à ce jour:

Après la connexion est réussie, Facebook vous recommande de valider les cookies ne sont en fait légitime et placé sur la machine client.

Voici deux méthodes qui peuvent être utilisées ensemble pour les résoudre. Vous pouvez ajouter la IsValidFacebookSignature méthode pour calebt Utilitaire de la classe. Avis j'ai changé d'GetFacebookCookie méthode légèrement.

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;
    }

Le SecretKey et ApiKey sont des valeurs fournies par Facebook. Dans ce cas, ces valeurs doivent être définies, provenant de préférence de la .fichier de configuration.

6voto

Adam C Points 377

J'ai assuré le suivi du projet de Loi est génial l'article, et fait de ce petit composant. Il prend soin de l'identification et de la validation de l'utilisateur à partir du Facebook Connect cookies.

Facebook Connect pour l'Authentification ASP.NET

J'espère que ça aide quelqu'un!

Cheers,

Adam

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X