You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义路径下Github App Node中间件为何拒绝所有请求?

问题原因及解决办法

核心原因

  1. 参数传递错误:Octokit 3.x 版本中,createNodeMiddleware 的第一个参数要求传入完整的 App 实例,而非单独的 app.webhooks 对象。旧写法会导致中间件无法正确处理请求上下文,进而拒绝所有请求。
  2. 缺失Webhook密钥配置:Octokit 3.x 强制启用请求签名校验,如果初始化 App 时未指定 webhooks.secret,GitHub 发送的所有请求都会因签名验证失败被直接拦截。

修复后的代码

import { createServer } from "node:http"
import { App, createNodeMiddleware } from "octokit"

// 注意:webhooks.secret必须和GitHub仓库Webhook设置中的Secret完全一致
const app = new App({
  appId: "你的AppID",
  privateKey: "你的私钥内容",
  webhooks: {
    secret: "你的Webhook密钥"
  }
})

// 第一个参数直接传入完整的App实例
createServer(createNodeMiddleware(app, { path: "/myapi/github/webhooks" })).listen(3001)

额外校验项

  • 确认 GitHub 仓库 Webhook 设置里的 Payload URL 与代码中的 path 完全匹配(包含端口、完整路径)。
  • 确保 Webhook 的 Content type 设为 application/json,Octokit 中间件默认仅处理 JSON 格式请求。
  • 检查服务器或反向代理是否修改了 X-Hub-Signature-256 请求头,该头是签名校验的核心依据,被修改会导致验证失败。

内容的提问来源于stack exchange,提问作者Aphex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:18:12