使用密码保护 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= 开头。