Files
juzi/docs/线上微信登录部署记录-2026-10-11.md
T

5.7 KiB
Raw Blame History

线上微信登录部署记录

时间: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,服务器出口 IP 49.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++,详见闭环测试记录。真实微信账号联调仍待完成,不能将接口部署成功视为微信授权成功。