idirdev/auth-fortress

GitHub: idirdev/auth-fortress

一个使用 Express 和 TypeScript 构建的生产级认证微服务,实现了 JWT 双令牌机制、refresh token 轮换、token 黑名单和 RBAC 等核心安全认证功能。

Stars: 0 | Forks: 0

# Auth Fortress ![TypeScript](https://img.shields.io/badge/TypeScript-5.3-blue?logo=typescript) ![Express](https://img.shields.io/badge/Express-4.18-000?logo=express) ![License](https://img.shields.io/badge/License-MIT-green) ![Node](https://img.shields.io/badge/Node-%3E%3D18-339933?logo=node.js) 一个使用 Express 和 TypeScript 构建的生产级认证微服务。实现了 JWT access token、refresh token 轮换、bcrypt 密码哈希、基于角色的访问控制以及 token 黑名单机制。 ## 功能特性 - **JWT Access Token** -- 短期(15分钟)签名 token,用于无状态认证 - **Refresh Token 轮换** -- 长期(7天)refresh token 在每次使用时进行轮换,防止重放攻击 - **Token 黑名单** -- 撤销单个 access token 或某个用户的所有 token - **重用检测** -- 如果已撤销的 refresh token 被重复使用,整个 token 族将失效 - **bcrypt 密码哈希** -- 可配置的盐值轮数(默认为 12) - **基于角色的访问控制** -- 用于根据用户角色(`user`、`admin`、`moderator`)限制端点访问的中间件 - **Zod 请求验证** -- 所有输入均经过验证,并提供描述性错误消息 - **安全标头** -- 开箱即用的 Helmet.js HTTP 安全标头 - **CORS** -- 可配置的跨源资源共享 ## API 端点 | Method | Endpoint | Auth | Description | |--------|------------------|----------|------------------------------------------| | POST | `/auth/register` | Public | 注册新用户 | | POST | `/auth/login` | Public | 使用邮箱和密码登录 | | POST | `/auth/refresh` | Public | 轮换 refresh token 并获取新的 token 对 | | POST | `/auth/logout` | Bearer | 撤销 token 并登出 | | GET | `/auth/me` | Bearer | 获取当前已认证的用户 | | GET | `/health` | Public | 健康检查 | ### 请求 / 响应示例 **注册** ``` curl -X POST http://localhost:4000/auth/register \ -H "Content-Type: application/json" \ -d '{"email": "user@example.com", "password": "securepass8", "name": "John Doe"}' ``` **登录** ``` curl -X POST http://localhost:4000/auth/login \ -H "Content-Type: application/json" \ -d '{"email": "user@example.com", "password": "securepass8"}' ``` **刷新** ``` curl -X POST http://localhost:4000/auth/refresh \ -H "Content-Type: application/json" \ -d '{"refreshToken": ""}' ``` **获取当前用户** ``` curl http://localhost:4000/auth/me \ -H "Authorization: Bearer " ``` **登出** ``` curl -X POST http://localhost:4000/auth/logout \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"refreshToken": ""}' ``` ## 快速开始 ``` # 1. Clone git clone https://github.com/idirdev/auth-fortress.git cd auth-fortress # 2. 安装依赖 npm install # 3. 配置环境 cp .env.example .env # 编辑 .env 并设置一个强 JWT_SECRET # 4. Development (with hot reload) npm run dev # 5. Production build npm run build npm start ``` ## 项目结构 ``` auth-fortress/ src/ config/ # Environment and app configuration controllers/ # Route handlers (register, login, refresh, logout, me) middleware/ # authenticate (JWT verify) + authorize (RBAC) models/ # User model and in-memory store routes/ # Express router definitions services/ # Token service (sign, verify, rotate, blacklist) + User service (CRUD) types/ # TypeScript interfaces and DTOs utils/ # Password hashing utilities server.ts # Express app entry point ``` ## 安全提示 - **务必在生产环境中更改 `JWT_SECRET`**。使用至少 64 个字符的加密随机字符串。 - 内存中的用户和 token 存储仅用于开发。在部署前,请将其替换为 PostgreSQL、Redis 或您选择的数据库。 - Refresh token 轮换意味着每个 refresh token 只能使用一次。如果 token 在轮换后被重复使用,该用户的所有 token 将自动撤销(重用检测)。 - Access token 在设计上是无状态的,但可以在登出时明确列入黑名单。 - 密码在 API 层面验证为 8--128 个字符,并使用 bcrypt 哈希(默认 12 轮盐值)。 ## 许可证 MIT ## 🇫🇷 法语文档 ### 描述 Auth Fortress 是一个生产就绪的认证微服务,使用 Express 和 TypeScript 构建。它实现了 JWT(短期 access token 和 refresh token 轮换)、bcrypt 哈希、基于角色的访问控制 (RBAC) 以及受损 token 重用检测。 ### 安装 ``` # 1. Clone git clone https://github.com/idirdev/auth-fortress.git cd auth-fortress # 2. 安装依赖 npm install # 3. 配置环境 cp .env.example .env # 使用安全的 JWT_SECRET 修改 .env # 4. 以开发模式启动 npm run dev ``` ### 使用 该服务暴露了 `/auth/register`、`/auth/login`、`/auth/refresh`、`/auth/logout` 和 `/auth/me` 端点。请参阅上面的 **API 端点** 部分和 `curl` 示例以了解每个请求的详细信息。在生产环境中,请将内存存储替换为 PostgreSQL 和 Redis。
标签:Bcrypt, CORS, Express, GitHub Advanced Security, GNU通用公共许可证, Helmet.js, HTTP安全头, JWT, MFA助手, MITM代理, Modbus, Node.js, RBAC, Streamlit, Token黑名单, TypeScript, Zod, 令牌管理, 会话管理, 刷新令牌, 安全加固, 安全插件, 授权安全, 自动化攻击, 访问控制, 防止暴力破解, 防重放攻击