如何在Laravel中正确创建签名的Webhook结构?

时间:2018-08-30 22:13:30

标签: php laravel webhooks sign

我的应用程序(APP 1)中有一个Webhook,其中另一个我的应用程序(APP 2)需要定期命中,但是我正在考虑安全签名这些请求的方法,以确保该Webhook设置成功仅可通过该应用访问。我想到了以下几点:

  • 在APP1的环境中保存秘密哈希,并在APP2发送的每个请求中,在特定的标头中添加哈希以进行比较。

但是,我认为这种方法非常基本,因为只要有人掌握了秘密,他们便可以访问端点。应该为此使用某种公共秘密密钥组合吗?有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果系统在相同的后端上运行,或者可以访问相同的数据库或类似数据库,则为每个请求滚动一个新的哈希并将其保存在本地最简单。

  1. APP1生成哈希并将其存储在〜/ secret_app_hash文件中
  2. APP2读取文件〜/ secret_app_hash并使用此参数发送请求
  3. APP1收到HTTPS请求,针对文件验证哈希值
  4. APP1生成一个新的哈希...基本上回到步骤1

这样,就永远不会重用哈希,只有APP1和APP2知道当前的哈希值。

如果系统没有相同的后端,另一种方法是根据两个应用程序都知道的秘密定期生成新哈希:sha256(SECRET + current_time_window),类似于2因子身份验证。

要补充的一点是,如果您使用的是HTTPS和POST请求,则旁观者无法读取该参数。