Facebook Connect y ASP.NET

Estoy en el paso 8 de la descripción de autenticación que se encuentra aquí: http://wiki.developers.facebook.com/index.php/How_Connect_Authentication_Works

En particular, el usuario ha iniciado sesión en Facebook a través de Facebook Connect y se ha creado su sesión web. ¿Cómo uso Facebook developer toolkit v2.0 (de claridad) para recuperar información sobre el usuario. Por ejemplo, me gustaría obtener el nombre y apellido del usuario.

Los ejemplos en la documentación están orientados a las aplicaciones de Facebook, que no es así.

Actualizar

Facebook lanzó recientemente la API Graph. A menos que esté manteniendo una aplicación que usa Facebook Connect, debe consultar la última API: http://developers.facebook.com/docs/

Tuve muchos problemas para averiguar cómo hacer llamadas al servidor una vez que el usuario inició sesión con Facebook Connect. La clave es que el JavaScript de Facebook Connect establece cookies en el cliente una vez que hay un inicio de sesión exitoso. Utiliza los valores de estas cookies para realizar llamadas de API en el servidor.

La parte confusa fue mirar la muestra de PHP que lanzaron. Su API del lado del servidor se encarga automáticamente de leer estos valores de cookies y configurar un objeto API que está listo para realizar solicitudes en nombre del usuario que ha iniciado sesión.

Aquí hay un ejemplo que usa Facebook Toolkit en el servidor después de que el usuario haya iniciado sesión con Facebook Connect.

Código del servidor:

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

Seguí este concepto y escribí un artículo completo que resuelve este problema en ASP.NET. Por favor mira lo siguiente.

Cómo recuperar datos de usuario de Facebook Connect en ASP.NET – Devtacular

Gracias a Calebt por un buen comienzo en esa clase de ayuda.

Disfrutar.

Facebook Connect en realidad no es demasiado difícil, solo falta documentación.

Ponga el javascript necesario desde aquí: http://tinyurl.com/5527og

Valide que las cookies coincidan con la firma proporcionada por Facebook para evitar la piratería, consulte: http://tinyurl.com/57ry3s para obtener una explicación sobre cómo comenzar.

Cree un objeto api (Facebook.API.FacebookAPI) En el objeto api, configure la clave de la aplicación y el secreto que Facebook le brinda cuando crea su aplicación. Establezca api.SessionKey y api.UserId partir de las cookies creadas para usted desde facebook connect.

Una vez hecho esto, puede comenzar a hacer llamadas a Facebook:

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

Esto falta en las respuestas enumeradas hasta ahora:

Después de que el inicio de sesión sea exitoso, Facebook recomienda que valide que las cookies son de hecho legítimas y colocadas en la máquina cliente por ellas.

Aquí hay dos métodos que se pueden usar juntos para resolver esto. Es posible que desee agregar el método IsValidFacebookSignature a la clase de utilidad de Calebt. Tenga en cuenta que también he cambiado ligeramente su método 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 y ApiKey son valores proporcionados por Facebook. En este caso, estos valores deben establecerse, preferentemente procedentes del archivo .config.

Seguí el gran artículo de Bill e hice este pequeño componente. Se encarga de identificar y validar al usuario de las cookies de Facebook Connect.

Autenticación de Facebook Connect para ASP.NET

¡Espero que eso ayude a alguien!

Aclamaciones,

Adán

También puedes usar SocialAuth.NET

Proporciona autenticación, perfiles y contactos con Facebook, Google, MSN y Yahoo con poco esfuerzo de desarrollo.

Mis dos centavos: un proyecto muy simple que utiliza la función “iniciar sesión con Facebook” – facebooklogin.codeplex.com

No es una biblioteca, pero muestra cómo funciona todo.