使用祕密保護 Webhook 承載

已完成

將您的函式設定為接收承載之後,會接聽傳送到您所設定端點的任何承載。 基於安全性理由,您可能想要只允許來自 GitHub 的那些要求。 有幾種做法可達到此目的。 例如,您可以選擇核准來自 GitHub IP 位址的要求。 較簡單的方法是設定祕密權杖並使用此權杖驗證要求。

在範例案例中,您 IT 部門的管理階層很滿意您已在 Azure Functions 中所建立以 Webhook 觸發的函式。 每當觸發 Gollum 事件時,關於公司 Wiki 更新的所有資訊都會由該函式剖析並傳送到公司。 管理階層曾經問您從 GitHub 傳遞的資訊安全性如何。 他們已要求您尋找保護該資訊的方法,並驗證該資訊是 GitHub 傳送的更新。

在本單元中,您將會了解如何使用祕密保護您的 Webhook 承載和驗證來自 GitHub 的承載。

Webhook 祕密

設定 Webhook 祕密可讓您確保傳送至承載 URL 的 POST 要求是來自 GitHub 的。 當您設定祕密時,您會在 Webhook POST 要求中收到 x-hub-signature 標頭。

若要在 GitHub 中設定祕密欄位,您可以移至已設定 Webhook 的存放庫,然後編輯 Webhook。 我們將在下一個練習中說明如何針對我們的範例執行此動作。

驗證來自 GitHub 的承載

設定您的秘密權杖之後,GitHub 會使用它為每個承載建立雜湊簽章。 此雜湊簽章會在標頭中作為 x-hub-signature 隨每個要求傳遞。

當您的函式收到要求時,您需要使用您的祕密計算雜湊,並確認它符合要求標頭中的雜湊。 GitHub 使用 HMAC SHA1 十六進位雜湊碼計算雜湊,因此您必須使用您的祕密和承載本文,用相同的方式計算您的雜湊。 雜湊簽章的開頭文字是 sha1=