如何保护webhook身份
问题描述:
我正在开发一项服务,客户可以注册他们的webhook url,我将在注册的url上发送更新。为了安全起见,我希望让客户端(接收方)识别其发送请求的我(服务器)。如何保护webhook身份
Facebook和Github都发送X-Hub-Signature
,其中包含以密钥为前缀的有效载荷的散列。
我可以遵循相同的策略。但如果我简单地使用jwt
:
- 在注册webhook时,我与客户端共享密钥。
- 然后在每个webhook请求中,我将发送使用相同密钥计算的jwt。
我对密码学知之甚少,但jwt方法似乎更有效,因为我不必一次又一次计算签名,因为我没有在签名中使用有效载荷。
但是为什么facebook和github都遵循另一种方法?
答
使用MAC(消息认证代码)允许认证消息,如名称所暗示的。发送每封邮件的秘密并不明智,因为这可能会导致秘密被泄露。攻击者可能会拦截其中一条消息,然后开始发布欺骗消息。
您可能要考虑的另一件事是重播攻击。如果攻击者稍后拦截消息并发送相同的消息会怎么样?
编辑:使用JWT是好的,因为它包含MAC,但您必须确保有效负载已通过身份验证(即包含在MAC计算中)。
同意!但关于“发送每封邮件的秘密并不明智,因为这可能会导致秘密被泄密。 ' 我不是普通的秘密。我会发送'jwt'。 –
感谢您指出重播攻击。 –
它看起来像我误解了你的问题的一部分。智威汤逊包含一个MAC。您需要将有效载荷包含在MAC/JWT的计算中,否则攻击者可以使用不同有效负载的MAC。 –