Ожидаемая подпись X-Hub через SHA1 не такая, как отправляет FB (код на C #) - PullRequest
1 голос
/ 06 апреля 2019

У меня проблемы с получением X-Hub-Signature, присланной мне на фейсбуке, в соответствии с тем, что я генерирую в C #.Некоторое время я думал, что неправильно выполняю эту функцию, но теперь я использовал несколько источников кода в Stack Overflow и на веб-сайте (http://billatnapier.com/security01.aspx), чтобы подтвердить, что я действительно правильно создаю SHA-1.

Итак ... что-то явно не так с контентом. Я использую ASP.NET Web API, а "Полезная нагрузка", которую я использую для подачи в алгоритм SHA-1, - это объект JSON, который я получаю из Facebook, преобразованный встрока. Я предполагаю, что это то, что они хотят, чтобы я использовал, когда они говорят «Полезная нагрузка», это правильно? Это строка, которая начинается с {"entry": [и заканчивается "object": "page"}

Мне кажется, что я все перепробовал и натолкнулся на кирпичную стену, так что надеюсь, что кто-то мне поможет. Веб-API немного отстал - даже захват X-Hub-Signature был проблемой, так как вы не можете просто использовать Запрос.Header ["X-Hub-Signature"]; мне почти интересно, стоит ли мне переключаться обратно на чистый MVC.

1 Ответ

0 голосов
/ 09 апреля 2019

ОК, поэтому я отвечаю на свой вопрос!Проблема с «полезной нагрузкой» заключается в том, что вы не можете просто получить объект JSON.Вы должны найти способ получить доступ к объекту Request из Web API, а затем прочитать полезную нагрузку следующим образом:

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

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

Похоже, что биннинг Web API и просто сделать это в MVC будет проще, чем тогдапросто сделай это:

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