# Security Key
**Repository Path**: SkyTing/security-key
## Basic Information
- **Project Name**: Security Key
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-07-11
- **Last Updated**: 2026-07-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Security-Key
**企业内部密码管理系统**
多角色权限 · 部门/小组组织 · 密码组与条目 · 操作审计 · 邀请与初始化向导
---
## 目录
- [项目简介](#项目简介)
- [程序架构](#程序架构)
- [总体分层](#总体分层)
- [后端模块(Go + Gin)](#后端模块go--gin)
- [前端模块(Vue 3)](#前端模块vue-3)
- [请求与安全链路](#请求与安全链路)
- [构建与部署形态](#构建与部署形态)
- [仓库结构](#仓库结构)
- [核心能力](#核心能力)
- [开源协议](#开源协议)
- [快速启动](#快速启动)
---
## 项目简介
Security-Key 面向企业内部场景,在**组织维度**(部门、小组)与**权限维度**(角色、密码组授权)上管理敏感条目,并提供**操作日志**与**邀请流程**(含公开链接接受邀请)。
后端为 **Go + Gin + GORM + MySQL**;前端为 **Vue 3 + TypeScript + Vite + Naive UI**。
---
## 程序架构
### 总体分层
```text
┌─────────────────────────────────────────────────────────────┐
│ 浏览器 / 客户端 │
└───────────────────────────┬─────────────────────────────────┘
│ HTTP / JSON
┌───────────────────────────▼─────────────────────────────────┐
│ 前端 SPA(Vue Router + Pinia + Axios) │
│ 开发态:Vite Dev Server;生产态:静态资源由后端托管 │
└───────────────────────────┬─────────────────────────────────┘
│
┌───────────────────────────▼─────────────────────────────────┐
│ Go + Gin 应用层 │
│ Handler → Service → GORM / MySQL │
│ Middleware(JWT / 鉴权 / 操作日志 / 异常)· 初始化/动态数据源 │
└─────────────────────────────────────────────────────────────┘
```
### 后端模块(Go + Gin)
| 层次 | 职责 | 典型包路径 |
|------|------|------------|
| **Handler** | REST 接口、参数绑定校验、返回统一响应 | `internal/handler` |
| **Service** | 业务编排、事务边界、领域规则 | `internal/service` |
| **Model** | GORM 实体与表结构映射 | `internal/model` |
| **DTO** | 入参/出参结构与 API 契约 | `internal/dto` |
| **Security** | JWT 签发与校验、当前用户上下文 | `internal/security` |
| **Crypto** | AES-GCM 加解密、密码强度策略 | `internal/crypto` |
| **Middleware** | JWT 解析、鉴权/角色、操作日志、CORS、异常恢复 | `internal/middleware` |
| **Datasource** | 可热切换的 GORM 数据源(动态数据源) | `internal/datasource` |
| **Config / Router** | 环境变量配置、路由装配与静态资源托管 | `internal/config`、`internal/router` |
**与业务强相关的横切能力:**
- **初始化向导(Setup)**:首次部署时引导配置数据库等;`SetupStatus` 中间件在未完成初始化时拦截 `/api/**`(除 `/api/setup`)返回 `403 系统尚未初始化`。
- **动态数据源**:`internal/datasource` 维护可在运行期热切换的 GORM 句柄;向导校验连接成功后 `AutoMigrate` 建表并切换(切换仅存内存,重启回到环境变量配置的初始数据源)。
- **密码条目保护**:账号/密码字段以 AES-GCM 加密存储(兼容旧 ECB 密文),明文仅在校验权限后解密返回;权限在 Service 层与授权表(密码组/条目访问关系)中落实。
- **公开邀请**:`/api/invitations/accept-by-token` 提供免登录场景下的安全边界(JWT `invite_accept` 令牌校验),与站内邀请流程区分。
### 前端模块(Vue 3)
| 区域 | 说明 |
|------|------|
| **路由** | `vue-router` 组织页面与鉴权相关导航 |
| **状态** | `pinia` 管理登录态、用户信息等 |
| **UI** | `naive-ui` 组件库 |
| **HTTP** | `axios` 封装 API,与后端 JWT 约定配合 |
| **构建** | `vite` 开发与打包;`build:static` 可将产物同步到后端静态目录(见下节) |
### 请求与安全链路
```text
请求进入
→ ParseToken 中间件(解析 Bearer access 令牌、注入当前用户)
→ RequireAuth / RequireRoles 中间件(鉴权与角色控制)
→ Handler(参数绑定校验)
→ Service(业务规则 + 事务)
→ GORM / MySQL
→ 返回 JSON
写操作经 OpLog 中间件 → 记录操作日志(含操作人、IP 等)
异常经 fail 助手与 Recovery 中间件转换为规范 HTTP 状态与统一响应体
```
### 构建与部署形态
1. **前后端分离开发**:前端 `npm run dev`,后端 `go run ./cmd/server` 运行,通过代理或跨域访问 API。
2. **一体化部署**:前端执行 `npm run build:static`(`package.json` 中 `build:static`),将构建结果输出到 `backend/static`;后端二进制同时提供 **API** 与 **SPA 静态文件**;路由层的 SPA 回退(`NoRoute`)负责前端路由刷新时回退到 `index.html`。
---
## 仓库结构
| 路径 | 说明 |
|------|------|
| `backend/` | Go + Gin 工程:`cmd/server` 入口、`internal/*` 各层、`static/` 托管前端产物 |
| `frontend/` | Vue 3 + Vite 工程 |
---
## 核心能力
- 用户、部门、小组管理
- 密码组与密码条目(含可见性/授权、AES 加密与密码变更历史)
- 站内邀请与邮件邀请(公开链接接受邀请等场景由专门接口承载)
- 操作日志审计
- 初始化向导与动态数据源(向导参数加密持久化,重启自动恢复)
- 安全:会话吊销(登出/改密/改角色即时失效)、登录限速与锁定、MFA(TOTP)、强制改密、密钥版本化与轮换
- 工程化:健康探针 `/healthz` `/readyz`、指标 `/metrics`、API 文档 `/v3/api-docs` 与 `/swagger-ui.html`、优雅关闭、结构化日志、Docker/CI
> 部署与运维(环境变量、容器化、迁移、密钥轮换、安全基线)详见 [`backend/DEPLOY.md`](backend/DEPLOY.md)。
---
## 开源协议
本项目采用 **GNU Affero General Public License v3.0(AGPL-3.0)** 发布,详见 [`LICENSE`](LICENSE)。
你可以自由使用、复制、修改和分发本项目,包括商业使用;如果你修改本项目并通过网络服务形式向用户提供访问,需要按照 AGPL-3.0 的要求向这些用户提供对应源码。
---
## 快速启动
### 方式一:Docker 快速体验(推荐)
只需要本机安装 Docker:
```bash
docker compose up -d
```
访问:`http://localhost:8080`
首次进入初始化向导时,数据库填写:
| 字段 | 值 |
|------|----|
| 类型 | `MYSQL` |
| Host | `mysql` |
| Port | `3306` |
| 数据库名 | `security_key` |
| 用户名 | `root` |
| 密码 | `root` |
为避免和本机已有 MySQL 冲突,默认编排把 MySQL 暴露到宿主机 `13306`;容器内部仍是 `mysql:3306`,所以初始化向导仍按上表填写。
根目录 `docker-compose.yml` 默认使用已发布到 Docker Hub 的多架构应用镜像 `mcskyding/security-key:latest`。Compose 项目名固定为 `security-key`,容器会带项目前缀,例如 `security-key-app-1`、`security-key-mysql-1`。
Docker 镜像默认发布 `linux/amd64` 与 `linux/arm64`,覆盖主流 Windows / macOS / Linux 的 Docker 使用场景:
| 使用环境 | Docker 平台 |
|----------|-------------|
| Windows x86_64 Docker Desktop | `linux/amd64` |
| Intel Mac Docker Desktop | `linux/amd64` |
| Apple Silicon Mac Docker Desktop | `linux/arm64` |
| Linux x86_64 服务器/桌面 | `linux/amd64` |
| Linux ARM64 服务器/开发板 | `linux/arm64` |
### 方式二:本地开发
#### 后端
在 `backend` 目录:
```bash
go build -o security-key ./cmd/server
./security-key
# 或直接运行:go run ./cmd/server
```
默认服务地址:`http://localhost:8080`
主要环境变量(均有默认值,括号内为默认):`SK_PORT`(8080)、`SK_DB_HOST`(localhost)、`SK_DB_PORT`(3306)、`SK_DB_NAME`(security_key)、`SK_DB_USERNAME`(root)、`SK_DB_PASSWORD`(root)、`SK_JWT_SECRET`、`SK_AES_KEY`(32 字节)、`SK_SETUP_ENABLED`(true)、`SK_FRONTEND_BASE_URL`、`SK_CORS_ALLOWED_ORIGINS`。
**首次部署请通过系统提供的初始化向导完成数据库与管理配置,不要使用文档中的任何示例账号密码。**
#### 前端
在 `frontend` 目录:
```bash
npm install
npm run dev
```
默认开发地址:`http://localhost:3000`
#### 生产静态资源并入后端
```bash
cd frontend
npm run build:static
```
再按后端方式打包/启动 Go 服务,即可由同一端口提供页面与接口。
---
**Security-Key** — 内部密码与权限治理