idirdev/auth-fortress
GitHub: idirdev/auth-fortress
一个使用 Express 和 TypeScript 构建的生产级认证微服务,实现了 JWT 双令牌机制、refresh token 轮换、token 黑名单和 RBAC 等核心安全认证功能。
Stars: 0 | Forks: 0
# Auth Fortress




一个使用 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, 令牌管理, 会话管理, 刷新令牌, 安全加固, 安全插件, 授权安全, 自动化攻击, 访问控制, 防止暴力破解, 防重放攻击