拓扑:waf:443 → ca:8443(认证+前置转发)→ gateway:8445(仅 loopback 纯转发), WAF upstream 不变,core/dnfs2/前端零改动。 ca v1.0.0(新模块): - 认证资产逐字搬迁自 gateway v0.8.0(9 条认证路由、Token 双轨吊销、 PBKDF2、限流、WS 代理鉴权、wrapperHttp、优雅关闭) - handleForward 前置转发层:固定上游 gateway:8445;无 Target-Url 公开直转, 有则本地验签后注入 X-Auth-User/X-Auth-Admin/Authorization(strip-then-set) - is_special_header 新增剥离 x-auth-user/x-auth-admin;上游不可达统一 502 - confs/configs/ca.ini 新增([Upstream] gateway + UPSTREAM_GATEWAY env) gateway v0.9.0(2470→约 560 行): - 删除全部认证代码,退居 127.0.0.1:8445 - 启动 loopback 强制自检(非 loopback 拒绝启动) - X-Auth-User 存在性不变量:显式 Target-Url 无该头一律 401 - gateway.ini 精简至 [Server]/[Proxy]/[Downstream db] 验收:黑盒 34 断言对 8443 原样全绿(32 passed/2 skipped,与基线一致); 探针实测伪造 X-Auth-User 经 CA 被剥离(echo 实证)、直连 8445 无头 401、 白名单外 403、gateway 宕机 CA 502。core/init.txt 加入 ca/_run.sh。
52 lines
2.2 KiB
INI
52 lines
2.2 KiB
INI
[Server]
|
||
# CA(Central Auth)前置认证服务:接管原 gateway 的 8443 端口,
|
||
# WAF upstream 不变(waf → ca → gateway 前置拓扑)。
|
||
# - tls = off 启用 HTTP 模式(配合 waf 模块使用)
|
||
# - tls = on 启用 HTTPS 模式(独立部署,证书为 full_chain.crt / server.key)
|
||
address = 127.0.0.1
|
||
port = 8443
|
||
tls = off
|
||
|
||
[Upstream]
|
||
# 前置拓扑的唯一上游:认证通过后转发到 gateway(仅 loopback)
|
||
# 环境变量 UPSTREAM_GATEWAY 可覆盖
|
||
gateway = http://127.0.0.1:8445
|
||
|
||
[Token]
|
||
# Token 有效期(秒),默认 3600 = 1 小时
|
||
keep_time = 3600
|
||
# Token 刷新宽限期倍数:过期后 iat + keep_time * 倍数 窗口内仍可刷新,默认 2
|
||
refresh_grace_multiplier = 2
|
||
# Token 生命周期内最大刷新次数,超过后需重新登录,默认 10
|
||
max_refresh = 10
|
||
|
||
[Admin]
|
||
# 管理员账号白名单(分号分隔)。登录时命中即在 Token payload 写入 is_admin=true,
|
||
# 下游服务(dnfs 等)凭该字段豁免所有权校验,无需各自维护名单。
|
||
# 修改后需重启 ca 生效;旧 Token 无此字段,按非管理员处理。
|
||
users = 1776177662@qq.com;277665039@qq.com;
|
||
|
||
[CORS]
|
||
# 允许跨域的 Origin 白名单(分号分隔)
|
||
# 仅命中的 Origin 才会回填 Access-Control-Allow-Origin;缺省为空(不回填)
|
||
allowed_origins = https://qsont.me;https://www.qsont.me;http://127.0.0.1:8443;http://localhost:8443
|
||
|
||
[WsProxy]
|
||
# WebSocket 反向代理路由(仅管理员可访问)
|
||
# 格式:routes = /path=ws://host:port/target;/path2=ws://host2:port2/target2
|
||
# 握手阶段会校验 HTTP Upgrade 请求中的 Token(Authorization: Bearer xxx 或 Cookie: q4_token=xxx),
|
||
# 仅 Token 中 is_admin=true 的用户才能升级连接;非管理员或无 Token 直接拒绝。
|
||
# 支持 ws:// 和 wss:// 后端
|
||
# 示例:routes = /ws/aibox=ws://127.0.0.1:8765;/ws/other=wss://example.com/ws
|
||
routes = /ws/aibox=ws://127.0.0.1:8765;
|
||
|
||
[Downstream]
|
||
# 下游 pymsg 服务地址(其他微服务的 host:port)
|
||
# 环境变量可覆盖:DB_HOST/DB_PORT, CAPTCHA_HOST/CAPTCHA_PORT, SMTP_HOST/SMTP_PORT, CONFS_HOST/CONFS_PORT
|
||
db_host = 127.0.0.1
|
||
db_port = 8005
|
||
captcha_host = 127.0.0.1
|
||
captcha_port = 8009
|
||
smtp_host = 127.0.0.1
|
||
smtp_port = 8008
|