Facebook签名验证.NET代码

Facebook签名验证.NET代码,facebook,authentication,cookies,Facebook,Authentication,Cookies,现在是2010年9月,我正在尝试更新我们网站上的Facebook connect集成 我需要验证Facebook代码设置的身份验证cookie。我正在跟踪来自 请检查C#代码: 问题是我的md5与Facebook的sig从不匹配 DataFormatter.GetMD5Hash(payload + Settings.ApplicationSecret).ToUpper() != sid.ToUpper() 这永远是真的 请帮我找到解决办法 谢谢公共静态字典解析cookie(HttpCo

现在是2010年9月,我正在尝试更新我们网站上的Facebook connect集成

我需要验证Facebook代码设置的身份验证cookie。我正在跟踪来自

请检查C#代码:

问题是我的md5与Facebook的sig从不匹配

    DataFormatter.GetMD5Hash(payload + Settings.ApplicationSecret).ToUpper() != sid.ToUpper()
这永远是真的

请帮我找到解决办法

谢谢

公共静态字典解析cookie(HttpCookie-fbCookie)
{
如果(fbCookie==null)
返回null;
string value=fbCookie.value.Substring(1,fbCookie.value.Length-2);
SORTEDDICTIONARG=新SortedDictionary();
foreach(value.Split('&')中的字符串对)
{
字符串[]keyvalue=pair.Split('=');
如果(keyvalue.Length!=2)
继续;
sargs.Add(键值[0],键值[1]);
}
string sid=sargs[“sig”]??string.Empty;
特区政府。移除(“sig”);
字符串负载=sargs.Aggregate(string.Empty,(current,pair)=>current+(pair.Key+“=”+HttpUtility.UrlDecode(pair.Value));
if(string.IsNullOrEmpty(payload)| | DataFormatter.GetMD5Hash(payload+Settings.ApplicationSecret).ToUpper()!=sid.ToUpper())
返回null;
返回sargs.ToDictionary(pair=>pair.Key,pair=>pair.Value);
}
    public static string GetMD5Hash(string key)
    {
        StringBuilder result = new StringBuilder();
        MD5 md5 = new MD5CryptoServiceProvider();
        foreach (byte b in md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key)))
            result.Append(b.ToString("X2"));

        return result.ToString();
    }
    DataFormatter.GetMD5Hash(payload + Settings.ApplicationSecret).ToUpper() != sid.ToUpper()
    public static Dictionary<string, string> ParseCookie(HttpCookie fbCookie)
    {
        if (fbCookie == null)
            return null;

        string value = fbCookie.Value.Substring(1, fbCookie.Value.Length - 2);
        SortedDictionary<string, string> sargs = new SortedDictionary<string, string>();

        foreach (string pair in value.Split('&'))
        {
            string[] keyvalue = pair.Split('=');
            if (keyvalue.Length != 2)
                continue;
            sargs.Add(keyvalue[0], keyvalue[1]);
        }

        string sid = sargs["sig"] ?? string.Empty;
        sargs.Remove("sig");

        string payload = sargs.Aggregate(string.Empty, (current, pair) => current + (pair.Key + "=" + HttpUtility.UrlDecode(pair.Value)));


        if (string.IsNullOrEmpty(payload) || DataFormatter.GetMD5Hash(payload + Settings.ApplicationSecret).ToUpper() != sid.ToUpper())
            return null;

        return sargs.ToDictionary(pair => pair.Key, pair => pair.Value);
    }