n1kFord/jwt-auth
GitHub: n1kFord/jwt-auth
基于 Express.js 5 构建的生产级 JWT 身份认证 API,提供双令牌机制、CSRF 防护及速率限制等完整安全与工程化方案。
Stars: 0 | Forks: 0
# 🔐 JWT 认证 API
[](https://nodejs.org/) [](https://expressjs.com/) [](https://www.mongodb.com/) [](https://redis.io/) [](./LICENSE) [](https://github.com/n1kFord/jwt-auth/actions/workflows/test.yml) [](https://prettier.io/) [](https://github.com/n1kFord/jwt-auth/pulls)
## ✨ 功能
- 🔑 **JWT Access & Refresh Tokens**,支持自动轮换
- 🛡️ **CSRF 保护**(Double Submit Cookie 模式)
- 📦 **Redis** 用于持久化存储 refresh token
- 🚦 **速率限制**,防止暴力破解攻击
- 🪵 **Winston + Morgan** 日志记录,带有 chalk 样式
- 🧪 使用 Jest & Supertest 的**全面测试套件**
- ✅ 使用 **ESLint + Prettier** 保证代码质量
- 🐳 使用 **Docker Compose** 方便开发
## 🛠️ 技术栈
- **运行时**:Node.js 20+
- **框架**:Express.js 5.x
- **数据库**:MongoDB + Mongoose
- **缓存**:Redis(refresh tokens)
- **安全**:bcrypt, JWT, CSRF, 速率限制
- **日志**:Winston, Morgan, Chalk
- **测试**:Jest + Supertest
- **代码质量**:ESLint + Prettier
## 🚀 快速开始
### 前置条件
- Node.js 20+
- Docker & Docker Compose
### 安装
```
# 克隆 repository
git clone https://github.com/n1kFord/jwt-auth.git
cd jwt-auth
# 安装 dependencies
npm install
# 复制 environment variables
cp .env.example .env
# 启动 MongoDB 和 Redis
docker-compose up -d
# 运行 development server
npm run dev
```
### 环境变量
```
PORT=8080
MONGO_URI=mongodb://localhost:27017/authDB
REDIS_CLIENT_URI=redis://localhost:6379
JWT_SECRET=your-jwt-secret
JWT_REFRESH_SECRET=your-refresh-secret
```
## 📁 项目结构
```
jwt-auth/
├── src/
│ ├── config/ # Configuration (DB, Redis, constants)
│ ├── middlewares/ # Auth, CSRF, validation, logging
│ ├── models/ # User model
│ ├── routers/ # /auth and /me endpoints
│ ├── store/ # Redis token storage
│ ├── utils/ # Helpers (tokens, logger, hash, cookies)
│ ├── __tests__/ # Jest tests
│ └── index.js # Entry point
├── logs/ # Winston log files
├── docker-compose.yml
├── Dockerfile
└── package.json
```
## 📝 日志
- **Winston** — 带有日志级别(error, warn, info, debug)的文件 + 控制台日志记录
- **Morgan** — 与 Winston 集成的 HTTP 请求日志记录
- **Chalk** — 彩色控制台输出
## 🎨 代码风格
```
npm run lint # Check code style
npm run format # Auto-format with Prettier
```
## 🔌 API 端点
### 认证 (`/auth`)
| 方法 | 端点 | 描述 | CSRF |
| ------ | ----------- | -------------- | ---- |
| POST | `/register` | 注册用户 | ❌ |
| POST | `/login` | 登录用户 | ❌ |
| POST | `/refresh` | 刷新 token | ✅ |
| POST | `/logout` | 退出登录 | ❌ |
### 用户 (`/me`)
| 方法 | 端点 | 描述 | CSRF |
| ------ | ------------------ | -------------- | ---- |
| GET | `/` | 获取个人资料 | ❌ |
| POST | `/change-email` | 修改邮箱 | ✅ |
| POST | `/change-password` | 修改密码 | ✅ |
| POST | `/change-username` | 修改用户名 | ✅ |
| POST | `/change-bio` | 修改个人简介 | ✅ |
| DELETE | `/` | 删除账户 | ✅ |
## 📝 示例
### 注册
```
curl -X POST http://localhost:8080/auth/register \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"secret123","confirmPassword":"secret123"}'
```
### 登录
```
curl -X POST http://localhost:8080/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"secret123"}'
```
### 获取个人资料(带 CSRF)
```
curl -X GET http://localhost:8080/me/ \
-H "x-csrf-token: your-csrf-token" \
-H "Cookie: token=access-token; XSRF-TOKEN=csrf-token"
```
## 🧪 测试
```
npm test
```
## 🐳 Docker
```
# 启动所有 services
docker-compose up -d
# 停止所有 services
docker-compose down
```
## 🔧 环境变量
| 变量 | 描述 |
| -------------------- | --------------------------- |
| `PORT` | 服务器端口(默认:8080) |
| `MONGO_URI` | MongoDB 连接字符串 |
| `REDIS_CLIENT_URI` | Redis 连接字符串 |
| `JWT_SECRET` | access token 密钥 |
| `JWT_REFRESH_SECRET` | refresh token 密钥 |
## 🛡️ 安全
- **JWT** 使用短有效期的 access token(15分钟)和长有效期的 refresh token(7天)
- **Token 轮换** — 每次刷新时生成新的 refresh token
- **CSRF 保护** — Double Submit Cookie 模式
- **速率限制** — 全局 100 个请求/15分钟,10 次登录尝试
- **HTTP-only Cookie** — 防止 XSS 攻击
- 使用 **Bcrypt** 进行密码哈希处理
## 📄 **许可证**
本项目基于 [MIT License](./LICENSE) 授权。
欢迎自由使用、修改和分发,请注明出处。
**⭐ 如果这个项目对您有帮助,请给本仓库点个 Star!**
标签:Express, GNU通用公共许可证, JWT, MITM代理, MongoDB, Node.js, Redis, Syscall, Web开发, 搜索引擎查询, 自定义脚本, 请求拦截