GitHub 配置
创建 Fine-grained PAT
- 打开 GitHub → Settings → Developer settings → Personal access tokens → Fine-grained tokens
- New token
- Repository access 选 Only select repositories,只勾选评论数据仓库
- Permissions → Repository permissions → Contents: Read and write
- 生成后立刻复制,页面关闭后无法再次查看
为什么必须单仓库
PAT 的权限边界就是这台评论系统的爆炸半径。只授权一个仓库时,泄露最多让攻击者往评论仓库写垃圾文件。授权过宽时,泄露等于把更多仓库交出去。
关于 GITHUB_SECRET
COMMENTS_SECRET 是另一把密钥,和 PAT 无关。它用来派生审批签名与邮箱加密钥匙。泄露它意味着攻击者能伪造审批链接,因此同样要保密。
轮换
- PAT 轮换:在 GitHub 撤销旧 token,在部署平台更新
GITHUB_TOKEN,重新部署 - COMMENTS_SECRET 轮换:所有未使用的审核链接立即失效;已写入的加密邮箱带指纹,旧钥可临时保留用于解密
权限自检
部署后访问 /api/health,git.readable 为 true 说明 PAT 至少能读。写入权限只能在批准一条评论时验证。
常见 403 原因:
- PAT 没有勾选该仓库
- 权限里内容只给了 Read,不是 Read and write
- 仓库名大小写或
owner/repo拼写错误