# iam 身份认证服务

> 版本：0.1（骨架）
> 日期：2026-07-07
> 状态：P2 待交付
> 关联文档：[架构影响地图](../../architecture/004_architecture_impact_map.md)

---

## 1. 模块职责

iam 是身份认证限界上下文，管理 User、Role、Permission 三大聚合。
负责用户注册/登录/登出、JWT RS256 签发与刷新、三层角色模型（系统/组织/临时）分配与校验。
同时对外提供权限列表查询（供 api-gateway 与业务服务缓存）。

---

## 2. 技术栈

| 类别 | 技术 | 版本 | 用途 |
|------|------|------|------|
| 语言 | TypeScript | 5.5+ | 类型安全 |
| 框架 | NestJS | 10.x | 依赖注入、模块化 |
| ORM | Drizzle ORM | 0.31+ | 数据访问 |
| 数据库 | MySQL | 8.x | 用户/角色/权限主库 |
| 缓存 | Redis | 7.x | 权限列表缓存、会话 |
| 密码 | bcrypt | 5.x | 密码哈希 |
| 校验 | Zod | 3.23+ | 运行时校验 |
| JWT | jose | 5.x | RS256 签发与公钥暴露 |

---

## 3. 架构图

```mermaid
graph TB
    BFF[BFF/网关] -->|gRPC| IAM[iam 服务]
    IAM --> USER[UserAggregate]
    IAM --> ROLE[RoleAggregate]
    IAM --> PERM[PermissionAggregate]
    IAM -->[(MySQL)]
    IAM -->[(Redis<br/>权限缓存)]
    IAM -->|JWKS| GW[api-gateway 公钥拉取]
    IAM -.事件.-> K[(Kafka<br/>edu.identity.user.*)]
```

> 待 P2 交付时补充完整的分层架构图（Controller/Application/Domain/Infrastructure）。

---

## 4. 核心流程图

```mermaid
sequenceDiagram
    participant GW as API Gateway
    participant IAM as iam
    participant DB as MySQL
    participant K as Kafka

    GW->>IAM: gRPC Login(username, password)
    IAM->>DB: 查询用户 + bcrypt 校验
    IAM->>IAM: 生成 JWT RS256
    IAM-->>GW: {accessToken, refreshToken}
    IAM->>K: 发布 edu.identity.user.logged_in
```

> 待 P2 交付时补充：刷新令牌流程、权限校验流程、角色分配流程。

---

## 5. 对外契约

- **gRPC 服务**：UserService（Login/Refresh/Logout/Register/GetUserProfile）、RoleService、PermissionService（待 P2 定义 protobuf）
- **HTTP 端点**：`/.well-known/jwks.json` 暴露 RS256 公钥
- **领域事件**：`edu.identity.user.created`、`edu.identity.user.updated`、`edu.identity.role.assigned`

> 待 P2 交付时补充完整 protobuf 定义与事件 schema。

---

## 6. 依赖关系

- **上游**：teacher-bff、student-bff、parent-bff、api-gateway（JWKS 拉取）
- **下游**：MySQL（用户/角色/权限表）、Redis（权限缓存）、Kafka（领域事件）
- **共享包**：shared-proto、shared-ts

---

## 7. 架构约束

1. JWT 必须使用 RS256 非对称签名，私钥仅 iam 持有
2. 密码必须 bcrypt 哈希，禁止明文存储
3. 权限列表缓存 TTL 5 分钟，事件驱动失效
4. 三层角色权限取并集，拒绝权限取交集

> 待 P2 交付时补充完整约束清单。

---

## 8. 架构决策

> 待 P2 交付时补充 ADR 记录，预计包括：RS256 选型、bcrypt 参数、会话管理策略、权限缓存策略。
