2016-11-21 82 views
3

我正在開發一項服務,客戶可以註冊他們的webhook url,我將在註冊的url上發送更新。爲了安全起見,我希望讓客戶端(接收方)識別其發送請求的我(服務器)。如何保護webhook身份

FacebookGithub都發送X-Hub-Signature,其中包含以密鑰爲前綴的有效載荷的散列。

我可以遵循相同的策略。但如果我簡單地使用jwt

  1. 在註冊webhook時,我與客戶端共享密鑰。
  2. 然後在每個webhook請求中,我將發送使用相同密鑰計算的jwt。

我對密碼學知之甚少,但jwt方法似乎更有效,因爲我不必一次又一次計算簽名,因爲我沒有在簽名中使用有效載荷。

但是爲什麼facebook和github都遵循另一種方法?

回答

1

使用MAC(消息認證代碼)允許認證消息,如名稱所暗示的。發送每封郵件的祕密並不明智,因爲這可能會導致祕密被泄露。攻擊者可能會攔截其中一條消息,然後開始發佈欺騙消息。

您可能要考慮的另一件事是重播攻擊。如果攻擊者稍後攔截消息併發送相同的消息會怎麼樣?

編輯:使用JWT是好的,因爲它包含MAC,但您必須確保有效負載已通過身份驗證(即包含在MAC計算中)。

+0

同意!但關於「發送每封郵件的祕密並不明智,因爲這可能會導致祕密被泄密。 ' 我不是普通的祕密。我會發送'jwt'。 –

+0

感謝您指出重播攻擊。 –

+1

它看起來像我誤解了你的問題的一部分。智威湯遜包含一個MAC。您需要將有效載荷包含在MAC/JWT的計算中,否則攻擊者可以使用不同有效負載的MAC。 –

相關問題