No description
  • Go 57.2%
  • HTML 38.1%
  • Dockerfile 2.7%
  • Makefile 2%
Find a file
2026-08-09 11:52:53 +08:00
config chore: 修正文件权限位为 644 2026-08-07 11:58:38 +08:00
controller feat: Layla-IAM 统一认证服务初始版本 2026-08-07 11:31:36 +08:00
db feat: Layla-IAM 统一认证服务初始版本 2026-08-07 11:31:36 +08:00
deploy feat: Layla-IAM 统一认证服务初始版本 2026-08-07 11:31:36 +08:00
logger feat: Layla-IAM 统一认证服务初始版本 2026-08-07 11:31:36 +08:00
service feat: Layla-IAM 统一认证服务初始版本 2026-08-07 11:31:36 +08:00
templates style: 优化信任此设备勾选框对齐与焦点保持;成功页文案与居中调整 2026-08-09 11:18:00 +08:00
.dockerignore feat: Layla-IAM 统一认证服务初始版本 2026-08-07 11:31:36 +08:00
.gitignore feat: Layla-IAM 统一认证服务初始版本 2026-08-07 11:31:36 +08:00
config.yaml feat: Layla-IAM 统一认证服务初始版本 2026-08-07 11:31:36 +08:00
DEPLOY_NOTES.md feat: Layla-IAM 统一认证服务初始版本 2026-08-07 11:31:36 +08:00
Dockerfile feat: Layla-IAM 统一认证服务初始版本 2026-08-07 11:31:36 +08:00
go.mod feat: Layla-IAM 统一认证服务初始版本 2026-08-07 11:31:36 +08:00
go.sum feat: Layla-IAM 统一认证服务初始版本 2026-08-07 11:31:36 +08:00
main.go feat: 直接打开认证页登录成功后展示脱敏会话凭证 2026-08-07 12:03:08 +08:00
Makefile feat: Layla-IAM 统一认证服务初始版本 2026-08-07 11:31:36 +08:00
PROJECT_ANALYSIS.md feat: Layla-IAM 统一认证服务初始版本 2026-08-07 11:31:36 +08:00
README.md docs: 新增 README,存档代码评审建议修改项(暂不实施) 2026-08-09 11:52:53 +08:00

Layla-UISUnifiedAuth

统一身份验证网关TOTP 动态码登录 → 签发共享 Session Cookiecloverdo.cn 根域)→ 供各子站 auth_request 统一鉴权。

  • 技术栈Go 1.25 + Gin + Redis + viper环境变量注入凭据
  • 仓库:git.cloverdo.cn/Cloverdo/Layla-UIS.gitdev / main 同步)
  • 镜像:git.cloverdo.cn/cloverdo/layla-uis:20260808Forgejo 容器仓库)

部署

bash /opt/agent/deploy-layla-uis.sh   # 服务器 10.10.10.102 上的一键部署脚本

必要环境变量:AUTH_REDIS_ADDRAUTH_REDIS_PASSWORDAUTH_TOTP_SECRETAUTH_COOKIE_SECUREAUTH_TRUSTED_PROXIES 按部署环境调整)。详见 DEPLOY_NOTES.md

建议修改项(评审留档 2026-08-09

来源:外部大模型对当前代码的评审,已逐条核对源码,6 条全部属实。 结论:个人自用场景下暂无恶性 bug本轮暂不修改,留档供下次调整时参考。

1. 端口暴露范围 -p 6789:6789(优先修)

  • 问题Docker 示例Makefile、DEPLOY_NOTES把 6789 直接发布到所有网卡,等于多开一个公网攻击面。本服务设计上应由同机 Nginx 调 /_oauth_check,无需对外。
  • 建议Nginx 反代就绪后改为 -p 127.0.0.1:6789:6789,仅本机可访问。
  • 注意:改之前用户是 IP 直连 http://10.10.10.102:6789/ 访问的,改成回环地址后必须走 auth.cloverdo.cn 反代。

2. 配置缺少启动时校验(优先修)

  • 问题config.InitConfig() 只做 Unmarshal不校验 totp_secret 是否为空、TTL 是否 > 0、max_failures 是否合理。配置错误时服务照常启动,表现是"怎么都登录不了"(与本项目曾踩过的 viper 环境变量绑定坑同款症状)。
  • 建议:启动时校验关键配置,缺失/非法直接 logger.Log.Fatal
  • 价值:换机器/换域名复用镜像时,配置错了启动即报错,不用瞎猜。

3. rd 参数未 URL 编码(实际功能 bug

  • 问题Nginx 示例 ?rd=$scheme://$http_host$request_uri 未编码,原 URL 含多个 & 时(如 OAuth callback、复杂查询参数跳转会丢参数。DEPLOY_NOTES.md 已自认此问题。
  • 建议:长期改为服务端 state 或前端 encodeURIComponent 后再传。
  • 影响:普通访问 /、code-server 首页基本无感,个人自用场景碰到的概率低。

4. trusted_proxies 未配好时全站共享限流计数(部署坑)

  • 问题:默认只信任 127.0.0.1/::1Docker 模式下来源是网关 IP所有用户会被识别成同一 IP限流变成"全站共享一个失败计数器"。
  • 状态 已解决。当前部署已注入 AUTH_TRUSTED_PROXIES="127.0.0.1,::1,172.17.0.1"(含 Docker 网关)。
  • 提醒:换环境部署时记得核对日志中记录的 ClientIP把实际网关加进 trusted_proxies。

5. TOTP 验证码可在有效窗口内重复使用(低优先级)

  • 问题totp.Validate 默认允许 Skew 1±30s项目未记录"已使用过的 counter",同一验证码在有效期内可重复创建多个 Session。
  • 建议:如要补,用 Redis SETNX 记录已使用的 TOTP counter 即可。
  • 评估:个人自用 + 全程 HTTPS + 验证码只在本人 Authenticator 里,风险低,不建议为此增加复杂度。

6. X-Auth-Token 兼容模式优先级问题(小逻辑 bug

  • 问题CheckToken() 只在 Cookie 缺失/为空时才读 X-Auth-Token。若浏览器带过期 Cookie 同时 Header 有有效 Token有效 Header 会被忽略,直接 401。
  • 建议:改为"先验证 Cookie无效再尝试 Header"。当前主要靠 Nginx auth_request 走 Cookie基本用不到 Header触发条件苛刻。

变更记录

  • 2026-08-09dev 与 main 同步至 df466bf(勾选框对齐/焦点保持、成功页文案与居中、页脚版本号);构建镜像 20260808 并推送 Forgejo 容器仓库;新增本文档存档评审建议。