如何在 Express.js 中使用 Webhooks

阅读时长 5 分钟读完

什么是 Webhooks?

Webhooks 是一种自动化通知机制,通过 HTTP 请求从其他应用程序向你的应用程序发送数据,实现两个应用程序之间的信息交流。比如,当某个 Github 仓库有新的提交时,Github 会向指定的 URL 发送 HTTP 请求,你的应用程序就能获取到该提交的详情,进行相关的处理。

Webhooks 的应用场景

Webhooks 的应用场景非常广泛,比如:

  1. 实时更新信息:比如社交网络应用程序,可以通过 Webhooks 实时获取用户发布的内容。
  2. 自动同步数据:比如企业内部系统和电商平台之间,通过 Webhooks 实时同步订单信息。
  3. 自动化部署:比如将代码仓库和服务器进行绑定,当仓库有新的提交时,服务器可以自动部署最新代码。

Webhooks 的实现需要有一个接收 HTTP 请求的服务端程序,这里我们使用 Express.js。下面给出一个简单的示例代码:

-- -------------------- ---- -------
----- ------- - -------------------
----- ---------- - -----------------------
----- --- - ----------

-- -- ----------- ---
---------------------------

-- -- -------- ---
---------------------------- ----- ---- -- -
  ----------------- ------ - -------- -----
  ----------------------
  ------------ -------- -----
---

-- -- ------- ----
---------------- -- -- -
  -------------------- ------ --------- -- ---- -------
---

代码说明:

  1. 首先引入 expressbody-parser 模块。
  2. 创建一个 Express 应用程序实例。
  3. 配置 body-parser 中间件,用于解析 HTTP 请求体中的 JSON 格式数据。
  4. 定义 Webhooks 的路由,接收 POST 请求,并输出请求体中的内容。
  5. 启动 Express 应用程序,监听 3000 端口。

Webhooks 的安全性问题

考虑到 Webhooks 的安全性问题,我们需要对接收到的 HTTP 请求进行验证,确认请求是否来自合法的源,请求中的数据是否被篡改。常用的验证方式包括:

  1. 通过 SSL/TLS 协议建立加密通道,保证数据传输过程中的安全性。
  2. 对请求头中的 X-Hub-Signature 字段进行验证,确认请求是否来自 Github,并且请求中的数据是否被篡改。

下面给出加密签名的验证示例代码:

-- -------------------- ---- -------
----- ------ - ------------------

-- ----
-------- -------------------- ---- ----- -
  ----- ------- - -------------------------
  -- ---------- -
    ------ ------------- ---- -- --------
  -
  ----- ------ - ------------------ -- ----------
  ----- --------- - ---------------------------
  ----- ---- - ------------------------- --------
  ----- ------ - ------------------- - ----------------------------------- --------
  ----- -------- - ---------------------- --------
  -- ---------------- --- ------------- -- ------------------------------- ---------- -
    ------ ------------- ------------
  -
  ------ -------
-

-- -- -------- --
---------------------------- ---------------- ----- ---- -- -
  ----------------- ------ - -------- -----
  ----------------------
  ------------------------ -------- -----
---

代码说明:

  1. 引入 crypto 模块,用于计算 HMAC 值和比较字符串是否相等。
  2. 定义一个验证签名的中间件函数 verifySignature,计算请求体中的 HMAC 值,比较请求头中的签名和计算出的 HMAC 值是否相等,如果相等则表示请求来自 Github,否则抛出 Invalid signature
  3. 在 Webhooks 的路由中,通过 verifySignature 中间件进行签名验证,如果通过验证则输出请求体中的内容。

总结

以上是介绍了如何在 Express.js 中使用 Webhooks,Webhooks 的应用场景非常广泛,需要注意保障其安全性。希望本文能给大家带来一些有用的指导和帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c9edb05ad90b6d04189bba

纠错
反馈