You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
# 数字人民币教学仿真后端
## 登录方式
- 主平台单点登录:主平台跳转至 `GET /api/v1/auth/sso?token=...` 。后端以主平台教师或学生档案的 `add_time` 动态 HMAC 密钥验证 Token, 生成一次性 `code` 并跳转至前端回调地址。
- 独立访问:浏览器访问 `GET /api/v1/auth/cas/login` ,跳转学校 CAS; 回调校验成功后生成同样的一次性 `code` 。
- 本地账号密码:`POST /api/v1/auth/login` 使用主平台账号和密码直接登录本系统。成功的主平台 SSO/CAS 登录会从主平台只读库读取该账号的密码,并立即以 BCrypt 哈希写入本地;本系统不保存或返回密码明文。
- 会话兑换:`POST /api/v1/auth/session/exchange`,请求体为 `{"code":"..."}` ,返回本系统访问 JWT 和刷新令牌。
本系统只接受教师和学生两类身份。平台账号与角色只能通过内部投影写入;没有用户、角色或用户角色的管理接口。
## 必需配置
生产环境通过环境变量配置:
| 变量 | 说明 |
| --- | --- |
| `DIGITAL_RMB_DB_URL` | 本系统 MySQL JDBC 地址 |
| `DIGITAL_RMB_DB_USERNAME` | 本系统数据库账号 |
| `DIGITAL_RMB_DB_PASSWORD` | 本系统数据库密码 |
| `DIGITAL_RMB_JWT_SECRET` | 至少 64 字符的应用 JWT 密钥 |
| `DIGITAL_RMB_PLATFORM_DB_URL` | 主平台 MySQL JDBC 地址 |
| `DIGITAL_RMB_PLATFORM_DB_USERNAME` | 主平台只读数据库账号 |
| `DIGITAL_RMB_PLATFORM_DB_PASSWORD` | 主平台只读数据库密码 |
| `DIGITAL_RMB_CAS_LOGIN_URL` | 学校 CAS 登录地址 |
| `DIGITAL_RMB_CAS_VALIDATE_URL` | CAS `serviceValidate` 地址 |
| `DIGITAL_RMB_CAS_CALLBACK_URL` | 本系统固定 CAS 回调地址 |
| `DIGITAL_RMB_FRONTEND_CALLBACK_URL` | 前端接收一次性 code 的固定回调地址 |
主平台数据库账号必须仅授予 `SELECT` 权限。不要将主平台 Token 写入日志、数据库或前端最终 URL。
## 本地运行
```powershell
mvn spring-boot : run -Dspring-boot . run . profiles = local -Dspring-boot . run . arguments =- -server . port = 8081
```
本地 Swagger: < http: // localhost:8081 / swagger-ui / index . html >
`local` 配置启动时会尝试初始化 `tzs001` 的本地密码哈希;该账号必须存在于主平台且属于教师或学生。密码变更后,用户下一次通过 SSO/CAS 登录会自动刷新本地哈希。