Facebook Connect和ASP.NET

Facebook Connect和ASP.NET,asp.net,facebook,facebooktoolkit,Asp.net,Facebook,Facebooktoolkit,我在这里找到认证概述的第8步: 特别是,用户已通过facebook Connect登录到facebook,并创建了他们的网络会话。如何使用facebook开发者工具包v2.0(源于clarity)检索有关用户的信息。例如,我想得到用户的名字和姓氏 文档中的示例是针对facebook应用程序的,但事实并非如此 更新 Facebook最近发布了Graph API。除非您正在维护一个使用FacebookConnect的应用程序,否则您应该查看最新的API:FacebookConnect实际上并不难,只

我在这里找到认证概述的第8步:

特别是,用户已通过facebook Connect登录到facebook,并创建了他们的网络会话。如何使用facebook开发者工具包v2.0(源于clarity)检索有关用户的信息。例如,我想得到用户的名字和姓氏

文档中的示例是针对facebook应用程序的,但事实并非如此

更新
Facebook最近发布了Graph API。除非您正在维护一个使用FacebookConnect的应用程序,否则您应该查看最新的API:

FacebookConnect实际上并不难,只是缺少文档

从这里放入必要的javascript:

验证Cookie是否与facebook提供的签名匹配以防止黑客攻击,请参阅:了解如何开始的说明

创建一个api对象(Facebook.api.FacebookAPI) 在api对象上,设置应用程序密钥,并在创建应用程序时设置Facebook提供的机密。 从facebook connect为您创建的cookies中设置
api.SessionKey
api.UserId

完成后,您可以开始向facebook拨打电话:

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

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

令人困惑的部分是他们发布的PHP示例。他们的服务器端API会自动读取这些cookie值,并设置一个API对象,该对象可以代表登录用户发出请求

下面是一个在用户使用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
}
公用事业公司

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中解决了这个问题。请参阅以下内容

感谢Calebt在帮助课程上的良好开端


享受。

目前列出的答案中缺少这一点:

登录成功后,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文件。

我继续阅读Bill的伟大文章,并制作了这个小组件。它负责从Facebook Connect Cookie中识别和验证用户

我希望这对别人有帮助

干杯


Adam

我的两分钱:一个利用“使用Facebook登录”功能的非常简单的项目-

不是一个库,但显示了它是如何工作的。

您也可以使用


它提供与facebook、google、MSN和Yahoo的身份验证、个人资料和联系人,几乎不需要开发工作。

您的帖子很好,您的图像链接被破坏只是一个遗憾,对于现在偶然发现这一点的人来说,这是一个更新。有一个更新的SDK,使用所有最新的FacebookOAuth功能将使这一过程变得更加简单。看看这里,看看这里,希望它能帮助其他人…注意,这个答案中与facebook相关的链接现在已经死了,希望有人能找到合适的替代者。你知道我在哪里可以得到关于SocialAuth.NET的详细文章吗?@Monodeep:你在SocialAuth.NET上到底想要什么样的文章-基础知识/如何使用/如何扩展等。?有一个全面的Wiki,通过参考演示应用程序的代码可以了解很多内容。