5.7 KiB
线上微信登录部署记录
时间:2026-10-11(北京时间)。服务器:ubuntu@1me.xajuzi.com,页面:https://1me.xajuzi.com/state/。
2026-10-12 最新状态:白名单已生效,生产服务器成功获取微信基础接口令牌,AppID/AppSecret 校验通过;新增账号切换、会话失效防串号和回调诊断,详见本轮联调记录。下文 40164 是历史结果,真实微信客户端授权仍待验证。
后续更新:已配置真实凭据
用户提供凭据后,已将其写入 /etc/juzi/wechat.env 并重启服务。该文件仅 root 可读写(600),目录为 700;临时凭据文件已移除,未写入代码库或前端。
- 公网健康检查正常;
/state/api/auth/config返回wechat: true。 - 真实登录入口返回微信授权 URL;AppID 与配置匹配,作用域为
snsapi_base,回调为https://1me.xajuzi.com/state/api/auth/wechat/callback。 - OAuth 绑定 Cookie 确认为 HttpOnly、Secure、SameSite=Lax,路径
/state/;回调无效 code 后返回登录错误,重复 state 被拒绝,未错误发放登录会话。 - 微信网页授权换码接口使用诊断用无效 code 返回
40029 invalid code,未返回 IP 白名单错误。这只验证端点连通和错误处理,不能证明 AppSecret 正确或真实授权成功(无效 Secret 对照也返回相同错误)。 - 微信基础接口
/cgi-bin/stable_token返回40164,服务器出口 IP49.233.222.47不在公众号 IP 白名单。须由公众号管理员加入后,才能完成这项基础凭据校验;不能直接把此错误认定为网页授权登录必然失败。 - 自动浏览器能够从真实页面发起微信跳转,但无法取得真实微信客户端授权 code,因此没有伪造生产微信身份或宣称真人登录已通过。
剩余验证:公众号管理员添加基础接口 IP 白名单;在真实微信内完成一次授权,确认权限与网页授权域名,并检查首页和报告列表。非登录功能的真实闭环结果见 线上闭环测试-2026-10-11.md。
用户确认加入白名单后的复测
2026-10-11 14:50 UTC,从同一生产服务器间隔复测:stable_token 和标准 cgi-bin/token 均仍返回 40164,提示 49.233.222.47 不在白名单。已确认服务器读取的 AppID 与用户提供的 wx645d9a7573f1fe9a 一致;未输出密钥或令牌。仍需核对是在该 AppID 对应账号的 IP 白名单 中添加并保存,而非网页授权域名/业务域名或其他微信应用的白名单。
网页授权端点返回的 HTML 仅做微信客户端环境判断,并未提供账号权限/域名是否合规的诊断结果;伪造 User-Agent 无法完成真实授权。换码负向测试仍正常,因此上述基础接口错误不能替代真实微信登录的验收结果。
已执行
- 确认服务器仓库为
55b3a45,包含ce8d0ff登录和 UI 更新;未覆盖服务器仓库文件。 - 原 Node 进程仍运行旧版本,重启
juzi-h5.service后新账号接口生效。 - 新增
/etc/systemd/system/juzi-h5.service.d/wechat.conf,设置实际 HTTPS 站点地址、回环监听、代理信任和私有环境文件加载。 - 初次准备
/etc/juzi/wechat.env时两个微信变量为空;随后已配置真实凭据。目录权限 700、文件 600,均为 root 所有。 - 修改
/etc/nginx/sites-available/juzi:为/state/api/admin/增加 Basic Auth(原先只有/api/admin/受保护);兼容旧路径,覆盖真实 IP 请求头;请求体上限调整为 20 MB,读取超时调整为 150 秒。 nginx -t通过后平滑 reload,原证书、管理员密码文件和域名验证文件未改动。- Node 确认仅监听
127.0.0.1:8080。
备份:/etc/juzi-deploy-backup.3ipdsA/,含修改前 nginx 配置和 systemd 主服务文件。新增 systemd drop-in 为独立文件,可单独回退;数据目录未移动或删除。
初次部署的线上检查(历史结果)
| 检查 | 结果 |
|---|---|
/state/、/state/api/health |
200 |
/state/api/auth/config |
200,wechat=false,明确缺配置 |
| 匿名读取报告 | 401 |
/state/api/admin/stats、/api/admin/stats、后台页面 |
401 |
| 数据目录、编码斜杠源码路径 | 404 |
| 同站但未同意协议的登录请求 | 400 |
| 跨站登录请求 | 403 |
| 微信登录请求(尚无凭据) | 503,未伪装登录成功 |
| 无效微信回调 | 302,返回 /state/?login_error=state |
| 根目录微信验证文件 | 200 |
初次部署时的凭据查找记录(现已由用户提供)
查找到的是 MP_verify_kpx234XimQGtFPo6.txt,只有 16 字符校验串;本地与服务器相关目录均未找到同名 .md。它用于域名验证,不包含 AppID/AppSecret,也不能用于换取微信用户身份。
在服务器运行 sudoedit /etc/juzi/wechat.env,填写对应公众号凭据:
WECHAT_APP_ID=公众号AppID
WECHAT_APP_SECRET=公众号AppSecret
保存后执行 sudo systemctl restart juzi-h5.service。无需在聊天中发送 AppSecret,也不要将该私有文件加入 Git。然后重新检查 /state/api/auth/config,并在微信内访问站点完成真实授权测试。
同时须确认该公众号具备网页授权权限,公众号后台的「网页授权域名」是 1me.xajuzi.com。目前仅确认校验文件可访问,尚无法确认公众号后台实际设置。回调 URL 已准备为 https://1me.xajuzi.com/state/api/auth/wechat/callback。
初次部署阶段没有触发收费 Face++ 检测,没有更改既有报告或真实用户账号。后续闭环测试使用独立测试身份调用一次真实 Face++,详见闭环测试记录。真实微信账号联调仍待完成,不能将接口部署成功视为微信授权成功。