Skip to content

Commit 73dd995

Browse files
committed
Clean README.md
1 parent 93dd3a6 commit 73dd995

1 file changed

Lines changed: 1 addition & 53 deletions

File tree

README.md

Lines changed: 1 addition & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -15,56 +15,4 @@
1515
- [ ] 添加DPoP token验证支持
1616
- [ ] 清理依赖注入逻辑
1717
- [ ] 优化接口目录
18-
- [ ] 使用RabbitMQ / Kafka替换MediatR
19-
20-
## 技术栈
21-
| 类别 | 技术/库 | 用途与说明 |
22-
| ---------------- |----------------------------------------|----------------------------------------------|
23-
| **框架与运行时** | .NET 8.0 | |
24-
| **架构模式** | 领域驱动设计 (DDD), CQRS | 指导项目分层与设计;通过`MediatR`库实现命令查询职责分离 |
25-
| **数据库** | PostgreSQL | 关系型数据库,善于全文查询,为后面论坛社区功能准备 |
26-
| **ORM** | Entity Framework Core 8 | |
27-
| **用户与认证** | ASP.NET Core Identity | 提供用户管理、角色管理、密码策略等基础功能 |
28-
| **密码哈希** | Konscious.Security.Cryptography.Argon2 | 实现了 `IPasswordHasher`,使用当前最安全的 Argon2id 算法。 |
29-
| **鉴权机制** | JWT (JSON Web Tokens)+Refresh token | 用于无状态的API鉴权,令牌短期有效,可使用Refresh token持久化,支持吊销。 |
30-
| **API 文档** | Swashbuckle.AspNetCore (Swagger) | 自动生成交互式API文档,方便前端开发和API测试。(带swagger ui) |
31-
| **验证** | FluentValidation | |
32-
| **对象映射** | AutoMapper | |
33-
34-
## API 实现
35-
36-
* **用户创建 (Admin-only)**:
37-
1. 仅管理员可通过 `POST /api/users/create` 创建用户。
38-
2. 系统自动为新用户生成一个临时的、安全的随机密码,并将其账户设置为锁定状态。
39-
3. 同时生成一个与用户关联的、有效期24小时的一次性通行证码 (`OneTimePasscode`)。
40-
4. 整个创建过程(创建用户、分配角色、生成通行证码)被包裹在一个数据库事务中,保证原子性。
41-
42-
* **账户激活 (User)**:
43-
1. 新用户使用获取到的通行证码和用户名,调用 `POST /api/users/activate`
44-
2. 激活时,用户需设置自己的新密码(有复杂度校验)。
45-
3. 系统验证通行证码的有效性,然后用新密码替换临时密码,并解除账户锁定。
46-
4. 为防止并发激活,此操作受资源锁(`IResourceLockService`)保护。
47-
48-
* **登录与鉴权**:
49-
1. 用户使用用户名和密码调用 `POST /api/auth/login`
50-
2. 系统使用 `Argon2id` 算法验证密码。
51-
3. **密码哈希升级**: 如果验证时发现用户密码的哈希参数已过时,系统会在用户无感的情况下,自动用新参数重新哈希密码并更新存储,然后正常颁发令牌。
52-
4. 成功后返回一个短期有效的JWT和一个Refresh Token。后续所有需要授权的请求都必须在 `Authorization` 头中携带此 `Bearer Token`
53-
5. JWT短期有效,到期后请使用 `POST /api/Auth/refresh` 续期,续期后原JWT和Refresh token皆会失效。
54-
55-
* **权限组管理 (Owner-only)**:
56-
* 通过 `/api/roles` 端点进行管理。
57-
* **所有者(Owner)** 拥有最高权限,可以创建、删除自定义角色,并管理所有角色中的用户成员。
58-
* 为防止系统瘫痪,核心角色(Owner, Administrator, User)不可被删除。
59-
* 为防止权限丢失,禁止将最后一个用户从 Owner 角色中移除。
60-
* 角色成员更新操作受资源锁保护,防止并发修改冲突。
61-
62-
## API 安全机制
63-
64-
* **JWT 鉴权**: 标准的 Bearer Token 认证,保护需要用户身份的端点。
65-
* **API 接口签名**:
66-
* 对所有非公开的API请求(除登录、激活、Swagger文档外),要求客户端进行HMAC-SHA256签名。
67-
* 客户端需在请求头中提供 `X-ApiKey`, `X-Timestamp`, `X-Nonce`, `X-Signature`
68-
* 签名字符串构成: `HTTP方法 + URL全路径(含规范化排序后的QueryString) + Timestamp + Nonce + 请求体原文`
69-
* 防重放攻击: 服务器会缓存已使用的 `Nonce`,在设定的时间窗口内(默认300秒)拒绝重复的 Nonce。
70-
* 此机制可通过 `appsettings.json` 中的 `ApiSignature:Enabled` 开关进行全局启用或禁用(开发时可禁用以方便调试)。
18+
- [ ] 使用RabbitMQ / Kafka替换MediatR

0 commit comments

Comments
 (0)