2017-03-22 33 views
2

我需要原始請求主體能夠通過SHA-1消化它來驗證與請求一起傳遞給我的Firebase函數(在Google Cloud Functions上運行)的Facebook webhook X-Hub-Signature標頭。如何獲取Google雲端函數中的原始請求正文?

問題是,在這種情況下(使用Content-Type: application/json標題),GCF使用bodyParser.json()自動分析正文,這會消耗來自流的數據(意味着它不能再次沿Express中間件鏈消耗),只提供解析JavaScript對象爲req.body。原始請求緩衝區被丟棄。

我試圖提供一個Express應用程序到functions.https.onRequest(),但是這似乎是作爲一個子應用程序運行,或者正在解析請求正文,就像您傳遞一個普通的請求 - 響應回調到onRequest()一樣。

有什麼辦法可以禁用GCF來爲我解析身體?或者我可以以某種方式指定我自己的verify回撥到bodyParser.json()?或者有其他方法嗎? PS:我第一次在一週前聯繫了Firebase支持,但是由於缺乏響應,我現在在這裏嘗試。

+1

我和你一樣。我試圖「重新生成」原始請求有效載荷,但這不可行。安全解決方法是使用隨機字符部署該功能,以便端點不可測。我在[我的文章]中詳細闡述了更多信息(https://medium.com/@mrkevinze/regenerating-a-raw-request-payload-an-impossible-task-e4133fb2571) –

+1

現在,您可以從req獲取原始身體。原始信體。 –

回答

2

不幸的是,默認的中間件目前沒有辦法得到原始的請求體。請參閱:Access to unparsed JSON body in HTTP Functions (#36252545)

+0

這太糟糕了。我主演了這個問題,並希望對此的某種形式的支持很快就會加入。這可能會導致我們部分或完全切換回亞馬遜,但直到目前爲止,我還是非常喜歡Firebase。 感謝您的信息和鏈接! – Peter

+2

有人在討論(超出公衆票),包括我在內的幾個Google員工都感到痛苦。我無法承諾時間表,但必須解決這個問題,因爲Web鉤子是我們的關鍵故事之一。它只是沒有讓beta版的切入。 –

相關問題