通过 SHA1 的预期 X-Hub-Signature 与 FB 发送的内容不同(C# 中的代码)

Expected X-Hub-Signature via SHA1 not same as what FB is sending (code in C#)

我在获取 Facebook 发送给我的 X-Hub-Signature 以匹配我在 C# 中生成的 X-Hub-Signature 时遇到问题。有一段时间我以为我 运行 函数错了,但我现在已经在 Stack Overflow 和一个网站 (http://billatnapier.com/security01.aspx) 上使用了多个代码源来确认我确实在正确创建 SHA-1。

所以....内容显然有问题。我正在使用 ASP.NET Web API 并且我用来输入 SHA-1 算法的 "Payload" 是我从 facebook 接收的 JSON 对象,转换为细绳。当他们说 "Payload" 正确时,我认为这是他们希望我使用的内容吗? 它是一个以 {"entry":[ 开头并以 "object":"page"}

结尾的字符串

我觉得我已经尝试了所有方法并且碰壁了所以希望有人能帮助我。 Web API 有点不对劲——即使获取 X-Hub-Signature 也是一个挑战,因为您不能只使用 Request.Header["X-Hub-Signature"];我几乎在想我是否应该切换回纯 MVC。

好的,所以我正在回答我自己的问题! "Payload" 的问题在于您不能简单地获取 JSON 对象。您必须找到一种从 Web API 访问 Request 对象的方法,然后像这样读入有效负载:

var context = Request.Properties["MS_HttpContext"] as HttpContextWrapper; 

using (StreamReader reader = new StreamReader(context.Request.InputStream)) 
{ 
payload = reader.ReadToEnd(); 
} 

它看起来像 binning Web API,在 MVC 中这样做会更容易,因为您只需这样做:

using (StreamReader reader = new StreamReader(HttpContext.Request.InputStream))
{
    PayLoad = reader.ReadToEnd();
}