我已经按照这个很棒的Stackoverflow 问题中的说明进行操作,但我不确定这个验证签名的事情。这是在 Facebook 工具包中以某种方式提供的,还是我必须自己做一些事情?关于如何做到这一点的文档不是很清楚,如果它已经在 facebook 工具包中烘焙,我不想花太多时间在上面。
有人做过吗?应该提到我在 C# 中使用标准的 ASP.NET Web 应用程序。任何帮助,将不胜感激!
我已经按照这个很棒的Stackoverflow 问题中的说明进行操作,但我不确定这个验证签名的事情。这是在 Facebook 工具包中以某种方式提供的,还是我必须自己做一些事情?关于如何做到这一点的文档不是很清楚,如果它已经在 facebook 工具包中烘焙,我不想花太多时间在上面。
有人做过吗?应该提到我在 C# 中使用标准的 ASP.NET Web 应用程序。任何帮助,将不胜感激!
目前,您必须自己做。我提供了一个简单的方法,您可以调用它来查看签名是否有效。
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 提供的值,您需要设置。
You can do this using FBConnectAuth, it does the same as above, and a little more.