基于 Golang + React 的企业级单点登录与身份提供商(IdP)平台。完整实现 OAuth 2.0 授权码流程 + OpenID Connect 1.0,提供功能完备的管理后台、应用门户和状态监控页。
- 🔐 标准协议:完整支持 OAuth 2.0 授权码模式 + OIDC 1.0(Discovery / JWKS / UserInfo / Revoke / EndSession)
- 🛡️ 安全设计:RSA-RS256 签名、PKCE 支持、Refresh Token 轮换、bcrypt 密码哈希、CSRF/CORS 防护
- 🎛️ 统一登录入口:所有用户共用
/oauth/login,登录后按is_staff自动路由到门户或管理后台 - 🧑💼 完备的管理后台:用户 / 部门 / 角色 / 应用 / 访问控制 / 配置 / 日志 / 状态监控
- 📊 应用状态监控:每 30 秒自动健康探测,90 天可用性条带 + 24h/7d/30d/90d 多窗口指标
- 🚀 零依赖开发:内置 SQLite + 内存 Store,无需 Postgres/Redis 即可本地启动
- 🐳 生产部署:Docker Compose 一键部署完整栈
| 落地页 | 应用门户 |
|---|---|
| 概览页 | 公开状态页 |
|---|---|
| 层 | 选型 |
|---|---|
| 后端 | Go 1.22 · Gin · GORM · golang-jwt · Viper |
| 前端 | React 18 · TypeScript 5 · Vite · Ant Design 5 · Zustand · React Router 6 |
| 数据 | PostgreSQL 16(生产) / SQLite(开发) · Redis 7(生产)/ 内存(开发) |
| 部署 | Docker Compose · Nginx 反向代理 |
.
├── sso-server/ # Go 后端
│ ├── cmd/server/ # main 入口
│ ├── internal/
│ │ ├── config/ # Viper 配置
│ │ ├── model/ # GORM 数据模型
│ │ ├── repository/ # 仓储层 + Seed 初始数据
│ │ ├── service/ # 业务服务
│ │ ├── handler/ # HTTP Handler(OAuth/Auth/User/App/...)
│ │ ├── middleware/ # JWT / CORS / 安全响应头
│ │ ├── oauth/ # 密钥管理 / Token / 授权码 / Store
│ │ ├── session/ # 服务端 Session(SSO Cookie)
│ │ ├── monitor/ # 状态监控调度器
│ │ └── router/ # 路由注册
│ ├── pkg/ # 通用工具(response / password / utils)
│ └── configs/config.yaml
├── sso-admin/ # React 前端
│ └── src/
│ ├── pages/
│ │ ├── login/ # 统一登录页(左品牌 + 右表单)
│ │ ├── consent/ # 授权同意页
│ │ ├── portal/ # 应用门户(普通用户)
│ │ ├── status/ # 公开状态监控页
│ │ └── admin/ # 管理后台子页面
│ ├── layouts/AdminLayout.tsx
│ ├── components/AuthGuard.tsx
│ ├── api/ store/ router/
│ └── styles/
├── deployments/ # Docker / Nginx
├── docker-compose.yml
├── Makefile
└── sso-design-v2.md # 设计文档
make installmake dev-backend后端将在 http://localhost:8080 启动,并完成:
- 自动建表(GORM AutoMigrate)
- 自动 RSA-2048 密钥生成(写入
./keys/) - 初始化默认账号、内置角色、示例应用与监控配置
make dev-frontend前端在 http://localhost:5173 启动,已配置代理。
| 页面 | URL | 说明 |
|---|---|---|
| 统一登录页 | http://localhost:5173/oauth/login | 所有用户登录入口 |
| 应用门户 | http://localhost:5173/portal | 普通用户登录后落地 |
| 管理后台 | http://localhost:5173/admin | 仅管理员用户 |
| 状态监控 | http://localhost:5173/status | 公开可访问 |
| OIDC Discovery | http://localhost:8080/.well-known/openid-configuration | — |
| 账号 | 密码 | 角色 |
|---|---|---|
admin |
Admin@123456 |
超级管理员(is_staff=true) |
jinli |
User@123456 |
普通用户 |
第三方应用接入:
- 在管理后台
应用中心创建应用,获取client_id与client_secret - 引导用户跳转到:
GET http://localhost:8080/oauth/authorize?
response_type=code
&client_id=YOUR_CLIENT_ID
&redirect_uri=https://your.app/callback
&scope=openid profile email
&state=RANDOM
&nonce=RANDOM
&code_challenge=... # PKCE 可选
&code_challenge_method=S256
- 用户登录授权后回调到
redirect_uri?code=...&state=... - 应用后端用授权码换 Token:
POST /oauth/token
Authorization: Basic base64(client_id:client_secret)
grant_type=authorization_code
&code=...
&redirect_uri=https://your.app/callback
&code_verifier=... # PKCE 时必填
返回:
{
"access_token": "...",
"refresh_token": "...",
"id_token": "...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "openid profile email"
}- 用 Access Token 调 UserInfo:
GET /oauth/userinfo
Authorization: Bearer <access_token>
cp .env.example .env
# 修改 .env 中的密码与 SSO_ISSUER
make docker-build
make docker-up完整栈监听 80 端口:
- Nginx 反代
/oauth/*,/api/*,/.well-known/*→ backend - 其他路径 → 前端 SPA
如需生成离线安装包(含 Docker 镜像),详见 release/PACKAGING.md。
快速打包:
# 1. 查看当前版本
cat release/VERSION
# 2. 执行打包(自动构建、打包、清理)
bash release/package-offline.sh
# 3. 生成的安装包
ls -lh oneauth-v*.tar.gz打包后生成 oneauth-vX.X.X.tar.gz,解压后执行 install.sh 即可部署。
| 端点 | 方法 | 说明 |
|---|---|---|
/.well-known/openid-configuration |
GET | 元数据 |
/oauth/jwks.json |
GET | RSA 公钥集 |
/oauth/authorize |
GET/POST | 授权端点 |
/oauth/token |
POST | 令牌端点 |
/oauth/userinfo |
GET/POST | 用户信息 |
/oauth/revoke |
POST | 撤销令牌 |
/oauth/end_session |
GET/POST | 单点登出 |
auth/login,auth/refresh,auth/profile,auth/logout,auth/change-passwordusers(CRUD + reset-password + lock + roles)departments/tree,departmentsroles,roles/:id/permissions,permissions/treeapps(CRUD + rotate-secret + toggle-status)dashboard/stats,dashboard/login-trends,dashboard/app-distributionlogs/login,logs/operation,logs/accessconfigs,dictionariesaccess/ipmonitor/apps,monitor/apps/:cid/config,monitor/apps/:cid/probe,monitor/apps/:cid/maintenance
overview- 整体状态 + 应用卡片列表(含 90 天时间线)apps/:cid/timeline- 指定应用 90 天聚合apps/:cid/windows- 多窗口可用性
配置文件 sso-server/configs/config.yaml,支持环境变量覆盖(前缀 SSO_)。
关键开关:
app.driver:sqlite或postgresredis.enabled:false启用内存模式monitor.enabled:true启动状态探测monitor.interval_seconds: 探测周期(默认 30s)
MIT License © 2026 zjl111