Add authenticated login and SSO protection

This commit is contained in:
inman
2026-05-29 15:54:13 +08:00
parent e36f28a668
commit 0648874801
50 changed files with 1853 additions and 63 deletions

View File

@@ -58,6 +58,30 @@ Docker 部署默认使用 `docker-compose.yml` 同时启动 Web 服务和 `zhini
主导航只保留创作、结果、设置不包含工作台、项目、模板中心、Billing 或桌面端入口。
## 账户登录 / SSO
发布环境默认要求账户登录。Web 登录支持两种方式:一是 OAuth2 Authorization Code用户跳转到认证中心登录本服务在 `/api/auth/callback` 后端换 token二是在本项目登录页直接输入账号、密码和图形验证码由本服务后端调用 `${AUTH_BASE}/oauth2/token` 的 password grant。两种方式都会通过 `${AUTH_BASE}/oauth2/jwks` 本地验签 JWT再写入 HttpOnly 会话 cookie。
需要在认证中心客户端配置中加入回调地址:
```text
https://你的域名/api/auth/callback
```
关键环境变量:
- `ZHINIAN_AUTH_REQUIRED=auto`:生产默认启用;本地可信开发可设为 `0`
- `ZHINIAN_AUTH_BASE_URL=https://<gateway-domain>/auth`
- `ZHINIAN_AUTH_CLIENT_ID=customPC`
- `ZHINIAN_AUTH_CLIENT_SECRET`
- `ZHINIAN_AUTH_SCOPE=server`
- `ZHINIAN_AUTH_ISSUER=https://pig4cloud.com`
- `ZHINIAN_AUTH_SESSION_SECRET`:长随机字符串,用于签名本地登录态
`/create``/assets``/settings`、第一方生成/资产 API、以及本地上传和生成结果文件都会受登录态保护。`/api/v1/*` 继续使用 `ZHINIAN_API_KEYS`,不走浏览器 SSO。
如果认证中心客户端未加入 `security.ignore-clients`,登录页的账号密码方式会要求图形验证码;验证码图片由 `/api/auth/captcha` 代理 `${AUTH_BASE}/code/image` 获取。
## 图片创作引擎
图片生成和局部重绘支持在设置页「状态」里按功能切换创作引擎:
@@ -116,6 +140,13 @@ cp .env.example .env.local
核心配置:
- `ZHINIAN_AUTH_REQUIRED=auto`
- `ZHINIAN_AUTH_BASE_URL`
- `ZHINIAN_AUTH_CLIENT_ID=customPC`
- `ZHINIAN_AUTH_CLIENT_SECRET`
- `ZHINIAN_AUTH_SCOPE=server`
- `ZHINIAN_AUTH_ISSUER=https://pig4cloud.com`
- `ZHINIAN_AUTH_SESSION_SECRET`
- `IMAGE_GENERATE_ENGINE=jimeng``evolink`
- `IMAGE_INPAINT_ENGINE=jimeng``evolink`
- `VOLCENGINE_ACCESS_KEY_ID`