From 9c4db682d5c07d73058b06eb2943740ad6042438 Mon Sep 17 00:00:00 2001 From: ericwyuan Date: Mon, 31 Aug 2026 22:38:29 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E8=AE=B0=E5=BD=95=208/29=20=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=201062=20=E4=BF=AE=E5=A4=8D=E4=B8=8E=208/31=20auth-hu?= =?UTF-8?q?b=20SSO=20=E6=8E=A5=E5=85=A5/=E6=B8=85=E7=90=86=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=EF=BC=9Bgitignore=20=E6=8E=92=E9=99=A4=E7=8B=AC?= =?UTF-8?q?=E7=AB=8B=E9=A1=B9=E7=9B=AE=20ai-gateway?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ .workbuddy/memory/2026-08-31.md | 43 +++++++++++++++++++++++++++++++++ .workbuddy/memory/MEMORY.md | 5 ++++ 3 files changed, 51 insertions(+) create mode 100644 .workbuddy/memory/2026-08-31.md diff --git a/.gitignore b/.gitignore index 67126a8..02ead64 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,6 @@ logs/ # Env .env .env.local + +# 其他独立项目(各有独立仓库,勿提交进本仓库) +ai-gateway/ diff --git a/.workbuddy/memory/2026-08-31.md b/.workbuddy/memory/2026-08-31.md new file mode 100644 index 0000000..bb0ca19 --- /dev/null +++ b/.workbuddy/memory/2026-08-31.md @@ -0,0 +1,43 @@ +# 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) diff --git a/.workbuddy/memory/MEMORY.md b/.workbuddy/memory/MEMORY.md index a474f3b..c911c6e 100644 --- a/.workbuddy/memory/MEMORY.md +++ b/.workbuddy/memory/MEMORY.md @@ -26,6 +26,11 @@ 手动 setsid 会端口冲突;venv `/opt/fam-edge/venv`;库 `/opt/fam-edge/data/oracle.db`; 素材 `/opt/fam-edge/gdrive_videos`;logs 目录 ubuntu 可写。 **前端亦托管于此机 Caddy :80**(fam-ui SPA + /api 反代回 NAS fam-core :8000 经 frp 隧道);旧机 129.146.203.203 已退役。 +- **登录(2026-08-31 起)**:fam-core 不再自己校验密码,登录全权走 auth-hub 统一登录 + (OAuth2 Auth Code + PKCE / OIDC,`http://129.146.26.249:5300`)。fam-core client + `a2PJTZuKQYxt1oGh`,回调 `:8000/api/auth/callback`(auth-hub 侧注册了 :80 和 :8000 两个回调)。 + NAS `.env` 配 `AUTH_HUB_ISSUER/CLIENT_ID/CLIENT_SECRET/REDIRECT_URI`(缺任一 fail closed)。 + 账号:`ericwyuan / iLoveJava5`(hub 端)。NAS venv 需 PyJWT + cryptography(RS256 验签)。 - 部署:本地 git 提交 push Gitea → tar 管道(NAS 直接解包;Oracle `--strip-components=1` 到临时目录再 cp,避免动 data/venv)。 - **NAS 部署坑(2026-08-29 踩过)**:拷贝 `.py` 会带旧 mtime,若 `.pyc` 比 `.py` 新,Python 加载陈旧字节码 (旧逻辑上线,曾导致 1062 假象)。部署后必须 `find src -name __pycache__ -exec rm -rf {} +` 再重启;