ShlomiPorush/auth-master

GitHub: ShlomiPorush/auth-master

一个轻量级自托管 API 认证授权服务,提供基于区域的细粒度权限管理、token 生命周期管控以及 Web 管理面板。

Stars: 0 | Forks: 0

# Auth Service 一个自托管的 token 认证和授权服务。通过现代化的 Web 仪表板或 REST API 管理 API token、定义权限区域,并验证访问权限。 ## 功能 - **Token 管理** — 创建、编辑、撤销和查看具有细粒度按区域权限的 API token - **基于区域的授权** — 定义区域(areas)并分配 `read` / `write` / `delete` / `all` 访问级别 - **API Key 管理** — 为编程式访问创建限定范围的 API Key(例如 n8n, CI/CD) - **MFA 保护** — 管理仪表板需要 TOTP 双因素认证 - **快速验证** — 带有速率限制且基于 Redis 缓存的 token 验证 - **双数据库支持** — PostgreSQL 用于生产环境,SQLite 用于轻量级/开发环境 - **现代化仪表板** — 用于管理 token、区域和 API Key 的深色主题管理 UI - **n8n 集成** — 用于工作流自动化的社区节点:action node + webhook trigger,内置 token 验证 ([n8n-nodes-auth-service](https://www.npmjs.com/package/n8n-nodes-auth-service)) ## 快速开始 ### Docker Compose 参见 [docker-compose.yml](docker-compose.yml) ### 首次运行 1. 启动容器:`docker compose up -d` 2. 打开 `http://localhost:8080` — 你将被重定向到设置向导 3. 创建你的管理员账户并设置 MFA (TOTP) 4. 登录并开始管理 token 和区域 ## 环境变量 | 变量 | 默认值 | 描述 | |---|---|---| | `DATABASE_URL` | `sqlite:///data/auth.db` | 数据库连接字符串。使用 `postgres://…` 连接 PostgreSQL | | `REDIS_URL` | `redis://:changeme@127.0.0.1:6379` | Redis 连接字符串(缓存和会话必需) | | `ADMIN_API_KEY` | `change-me-in-production` | 拥有所有 scope 完整访问权限的主 API Key | | `SESSION_SECRET` | _(开发默认值)_ | 用于签署会话 cookie 的密钥(至少 32 个字符) | | `APP_ENCRYPTION_KEY` | _(开发默认值)_ | 用于加密存储 token 的密钥(32 个十六进制字符) | | `ALLOWED_AREAS` | `orders,billing,webhooks` | 当 zones 表为空时的备用区域列表 | | `BOOTSTRAP_TOKEN` | _(空)_ | 可选的 token,用于通过 API 引导创建第一个管理员账户 | | `TOTP_ISSUER` | `AuthService` | 显示在身份验证器应用中的发行者名称 | | `ENVIRONMENT` | `production` | 应用环境(`production` 或 `development`) | | `VALIDATE_CACHE_TTL_SEC` | `300` | 已验证 token 在 Redis 中的缓存时间(秒) | | `ROOT_PATH` | _(空)_ | 用于子目录部署的 URL 路径前缀(例如 `/auth`) | | `COOKIE_SECURE` | `false` | 在 HTTPS 环境下运行时设置为 `true` | | `TZ` | `UTC` | UI 中日期的时区(例如 `Asia/Jerusalem`, `America/New_York`) | | `RATE_LIMIT_MAX_REQ` | `120` | 每个 IP 允许的最大验证请求数 | | `RATE_LIMIT_WINDOW_MS` | `60000` | 速率限制的时间窗口,以毫秒为单位(默认 1 分钟) | ## 架构 ``` ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Client / │ │ │ │ Redis │ │ n8n Node │────▶│ Auth Service │────▶│ (cache + │ │ │ │ (FastAPI) │ │ sessions) │ └──────────────┘ └──────┬───────┘ └──────────────┘ │ ┌──────▼───────┐ │ PostgreSQL │ │ or SQLite │ └──────────────┘ ``` ## 仪表板 管理仪表板提供以下功能: - **Tokens 标签页** — 创建、编辑、查看(受 MFA 保护)和删除 token - **Zones 标签页** — 创建和删除授权区域 - **API Keys 标签页** — 为外部集成创建限定范围的 API Key,编辑权限,复制 Key(受 MFA 保护) ## API 文档 完整的 REST API 参考请查阅 [API.md](API.md)。 ## 安全性 - 管理员密码使用 **bcrypt** 进行哈希处理 - 访问仪表板需要 **TOTP MFA**(双因素认证) - Token 和 API Key 使用 **AES-256-GCM** 进行静态加密 - Token 哈希使用 **SHA-256** 进行查找 - 会话 cookie 经过签名并存储在 Redis 中,具有可配置的 TTL - 对所有更改状态的管理员操作提供 CSRF 保护 - 对 `/validate` endpoint 进行速率限制 ## 许可证 MIT
标签:API网关, n8n, Streamlit, Web中间件, 后端开发, 搜索引擎查询, 权限管理, 模型越狱, 测试用例, 访问控制, 请求拦截, 逆向工具