跳转至

架构

平台遵循整洁架构(Clean Architecture)handler → usecase → repository → domain。业务核心从不 import Web 框架。

组成部分

Internet ──► nginx (TLS)
   ├─ /oauth2/*, /.well-known/*, /userinfo ─► Go API — 内置 OIDC issuer
   ├─ /rp/sign/*   ─► eID 签署中继(后端)
   ├─ /rp/eid/*     ─► eID 服务代理 — 个人(后端)
   ├─ /rp/eid-org/* ─► eID 服务代理 — 组织(后端)
   └─ 其余全部     ─► Next.js BFF (web) ──► 后端 API (:8080)
   内部网络:  db (PostgreSQL) · redis

分层

技术 说明
后端 Go · chi (net/http) · pgx(无 ORM) 整洁架构、RLS、手写 SQL
前端 Next.js 15 (BFF) 浏览器只与同源路由通信;令牌绝不进入客户端 JS
OIDC 提供方 内置(Go,usecases/oidc) 平台自行驱动登录/授权/登出流程
身份 e-ID Gerege RP 电子身份证验证
缓存/队列 Redis 会话拒绝名单、临时状态
AI Gemini(免 SDK 的 REST) 聊天、语音、翻译

安全

  • 行级安全(RLS) — 每个用户只能看到属于自己的数据行;启动时会有可执行性守卫 (生产环境要求使用非超级用户角色)。
  • BFF 模式 — 令牌保存在 httpOnly Cookie 中,绝不出现在浏览器 JS 里。
  • 双重 CSRF — 自定义请求头 + 来源(origin)校验。
  • 安全响应头 — CSP、HSTS、COOP/COEP/CORP;按 IP 限流。
  • 审计 — 哈希链式、仅追加的审计轨迹。

后端目录结构(概览)

backend/
├── cmd/api/server/        # 手动依赖注入接线 (server.go)
├── internal/
│   ├── business/
│   │   ├── domain/         # 纯领域层(不 import 任何内部包)
│   │   └── usecases/       # 业务逻辑(仅依赖接口)
│   ├── datasources/
│   │   ├── repositories/   # pgx 适配器 + 接口
│   │   └── caches/         # redis
│   └── http/
│       ├── handlers/       # func(w,r) error、v1.Wrap
│       ├── middlewares/    # 认证、oauth-bearer、限流 …
│       └── routes/         # 路由分组
├── pkg/                    # eid、oidc、secrethash、gemini …
└── migrations/             # 编号 SQL (N_name.up/down.sql)