# 2026-08-31 工作日志 ## fam-core 登录接入 auth-hub 统一登录(已部署 + 端到端验证) ### 目标(用户明确) `http://129.146.26.249:8000`(fam-core 公网入口,frp → NAS:8000)的登录改走 auth-hub 统一登录,账号 `ericwyuan` / `iLoveJava5` 登录。 ### 现状与动作 - SSO 代码本地早已提交(`8120d2a feat(fam-core): 登录改接 auth-hub 统一登录`),NAS 未部署(旧密码登录版)。 - **auth-hub 侧(甲骨文 /opt/auth-hub)**: - FAM-Core client `a2PJTZuKQYxt1oGh`(已存在)→ 轮换 secret 得明文 `yZfJfD3xJmrCj9PQlbt7P8An9ebZ-nT2f3v4BTtOSu8`(旧密钥失效) - redirect_uris 增加 `http://129.146.26.249:8000/api/auth/callback`(原 :80 回调保留, auth-hub 精确匹配,用户入口是 :8000 所以回调也要 :8000 路径) - **NAS 侧(fam-core)**: - venv 补装 `PyJWT==2.13.0` + `cryptography==50.0.1`(RS256 验签必需) - 部署新 `auth.py`(cat 管道覆盖) - `.env` 追加 4 个变量:`AUTH_HUB_ISSUER=http://129.146.26.249:5300`、 `AUTH_HUB_CLIENT_ID=a2PJTZuKQYxt1oGh`、`AUTH_HUB_CLIENT_SECRET=<上面>`、 `AUTH_HUB_REDIRECT_URI=http://129.146.26.249:8000/api/auth/callback` - 清 __pycache__、杀双 gunicorn(今天 18:56 又一个旧进程 + 8/29 旧 master)、单实例重启 ### 端到端验证(curl cookie jar 全链路) `/login` 302 → auth-hub `/authorize`(PKCE)→ hub 登录(ericwyuan/iLoveJava5 200)→ `authorize` 302 回 `:8000/api/auth/callback?code&state` → fam-core 换 token+JWKS 验签 → 种 fam_session → `/api/auth/check` = `{"authed":true}`,`/api/status` 200 ✓ ### 注意 - 本地 repo 3 个提交待 push(8120d2a SSO + 2 docs),等用户确认推送 - NAS 仍跑旧版其余代码(webhook 移除等未部署,独立待办) - 密码登录 `/api/login` 已移除;fam-ui SPA 无登录逻辑,不受影响 ## 补充:webhook/旧前端清理部署到 NAS(用户确认"清理") - 全量比对 NAS vs repo:仅 `app.py`、`motion_bp.py`、`config.yaml` 三处是旧版(其余已同步) - 同步:3 个文件(app.py 移除 static_bp/refresh_camera_map 调用;motion_bp.py 移除 webhook 端点; config.yaml 移除 camera_name_to_id/enrich_window_sec) - 删除废弃:`static_app.py`、`fam-ui/` 目录、根 `start_ui.sh`、`scripts/start_ui.sh` - 清 pycache + 单实例重启 - 验证:启动日志无 `refresh_camera_map` 告警;`/api/ss/webhook` → 401(已移除白名单与路由); SSO 登录 `/login` 302 → auth-hub 正常、`{"authed":true}`;`/api/ss/status` 200;Oracle 同步正常 - 至此 NAS fam-core 代码与本地 repo 全量一致(除 .env/venv/logs)