Facebook连接和ASP.NET

我在这里的authentication概述的第8步: http : //wiki.developers.facebook.com/index.php/How_Connect_Authentication_Works

特别是,用户已经通过Facebook连接loginFacebook,他们的networking会话已经创build。 我如何使用Facebook开发者工具包v2.0(从清晰)来检索有关用户的信息。 例如,我想获取用户的名字和姓氏。

文档中的示例是面向Facebook应用程序的,但事实并非如此。

更新

Facebook最近发布了Graph API。 除非您正在维护使用Facebook Connect的应用程序,否则应该查看最新的API: http : //developers.facebook.com/docs/

当用户使用Facebook Connectlogin时,我很难弄清楚如何进行服务器端调用。 关键是,一旦login成功,Facebook Connect javascript会在客户端上设置cookie。 您可以使用这些Cookie的值在服务器上执行API调用。

令人困惑的部分是看他们发布的PHP样本。 他们的服务器端API会自动处理读取这些cookie值,并设置一个API对象来准备代表login用户发出请求。

以下是用户使用Facebook Connectlogin后在服务器上使用Facebook Toolkit的一个示例。

服务器代码:

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

我跟进了这个概念,写了一篇完整的文章,解决了ASP.NET中的这个问题。 请看下面的内容。

如何从ASP.NET中的Facebook连接检索用户数据 – Devtacular

感谢Calebt在这个帮手类上的一个很好的开始。

请享用。

Facebook Connect其实并不难,只是缺乏文档。

从这里把必要的JavaScript: http : //tinyurl.com/5527og

validationcookie与facebook提供的签名相匹配以防止黑客入侵,请参阅: http : //tinyurl.com/57ry3s以获取有关如何入门的说明

创build一个api对象(Facebook.API.FacebookAPI)在api对象上,设置应用程序密钥和秘密Facebook为您提供当您创build您的应用程序。 从Facebook连接为您创build的cookie设置api.SessionKeyapi.UserId

一旦完成,您可以开始致电Facebook:

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

到目前为止列出的答案中缺less这一点:

login成功后,Facebookbuild议您validationcookie实际上是否合法,并由其放置在客户端计算机上。

这里有两个方法可以一起使用来解决这个问题。 您可能需要将IsValidFacebookSignature方法添加到calebt的Utility类中。 注意我也改变了他的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文件。

我跟着比尔的伟大的文章,做了这个小部分。 它负责从Facebook Connect cookie中识别和validation用户。

面向ASP.NET的Facebook Connect身份validation

我希望能帮助别人!

干杯,

亚当

你也可以使用SocialAuth.NET

它提供身份validation,个人资料和联系与脸谱,谷歌,MSN和雅虎几乎没有开发努力。

我的两分钱:一个非常简单的项目,利用“与Facebooklogin”function – facebooklogin.codeplex.com

不是图书馆,而是展示它是如何工作的。