docs: 添加 JWT_SECRET 和 ADMIN_TOKEN 生成方式说明
在环境变量模板和部署文档中添加了密钥生成的安全实践说明, 包括 openssl 和 Node.js 两种生成方式,以及相关的安全提示。
This commit is contained in:
parent
e893755340
commit
3623ad04b6
@ -2,11 +2,14 @@
|
|||||||
DATABASE_URL=mysql://root:password@localhost:3306/duoqi
|
DATABASE_URL=mysql://root:password@localhost:3306/duoqi
|
||||||
|
|
||||||
# JWT
|
# JWT
|
||||||
|
# 生成安全密钥: openssl rand -base64 32
|
||||||
|
# 或: node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
|
||||||
JWT_SECRET=change-me-to-a-secure-secret
|
JWT_SECRET=change-me-to-a-secure-secret
|
||||||
JWT_EXPIRES_IN=1h
|
JWT_EXPIRES_IN=1h
|
||||||
JWT_REFRESH_EXPIRES_IN=30d
|
JWT_REFRESH_EXPIRES_IN=30d
|
||||||
|
|
||||||
# Admin
|
# Admin
|
||||||
|
# 生成方式同 JWT_SECRET,建议与生产环境使用不同的值
|
||||||
ADMIN_TOKEN=change-me-admin-token
|
ADMIN_TOKEN=change-me-admin-token
|
||||||
|
|
||||||
# Huawei ID Kit (Phase 1b)
|
# Huawei ID Kit (Phase 1b)
|
||||||
|
|||||||
@ -5,11 +5,14 @@
|
|||||||
DATABASE_URL=mysql://duoqi_prod:prod-password@your-rds-endpoint:3306/duoqi_prod
|
DATABASE_URL=mysql://duoqi_prod:prod-password@your-rds-endpoint:3306/duoqi_prod
|
||||||
|
|
||||||
# JWT
|
# JWT
|
||||||
|
# 生成安全密钥: openssl rand -base64 32
|
||||||
|
# 密钥长度必须 >= 32 字符
|
||||||
JWT_SECRET=prod-super-secret-jwt-key-change-this
|
JWT_SECRET=prod-super-secret-jwt-key-change-this
|
||||||
JWT_EXPIRES_IN=1h
|
JWT_EXPIRES_IN=1h
|
||||||
JWT_REFRESH_EXPIRES_IN=30d
|
JWT_REFRESH_EXPIRES_IN=30d
|
||||||
|
|
||||||
# Admin
|
# Admin
|
||||||
|
# 生成方式同 JWT_SECRET,生产环境必须使用强密钥
|
||||||
ADMIN_TOKEN=prod-admin-token-change-this
|
ADMIN_TOKEN=prod-admin-token-change-this
|
||||||
|
|
||||||
# Huawei ID Kit
|
# Huawei ID Kit
|
||||||
|
|||||||
@ -344,14 +344,33 @@ FLUSH PRIVILEGES;
|
|||||||
|
|
||||||
#### 环境配置文件
|
#### 环境配置文件
|
||||||
|
|
||||||
|
**密钥生成**(在配置环境变量之前):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 生成 JWT_SECRET(用于签名和验证用户 JWT)
|
||||||
|
openssl rand -base64 32
|
||||||
|
|
||||||
|
# 生成 ADMIN_TOKEN(管理后台认证令牌)
|
||||||
|
openssl rand -base64 32
|
||||||
|
|
||||||
|
# 或使用 Node.js 生成:
|
||||||
|
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
|
||||||
|
```
|
||||||
|
|
||||||
|
> **安全提示**:
|
||||||
|
> - `JWT_SECRET` 必须至少 32 字符(代码中有强制校验)
|
||||||
|
> - 生产环境和测试环境必须使用不同的密钥
|
||||||
|
> - 密钥生成后应妥善保管,不要提交到 Git 仓库
|
||||||
|
> - 可在任意服务器生成,关键是通过安全渠道传输到目标环境
|
||||||
|
|
||||||
**生产环境** `/opt/duoqi-api/.env.prod`:
|
**生产环境** `/opt/duoqi-api/.env.prod`:
|
||||||
|
|
||||||
```env
|
```env
|
||||||
DATABASE_URL=mysql://duoqi_prod:prod-password@your-rds-endpoint:3306/duoqi_prod
|
DATABASE_URL=mysql://duoqi_prod:prod-password@your-rds-endpoint:3306/duoqi_prod
|
||||||
JWT_SECRET=prod-super-secret-jwt-key
|
JWT_SECRET=prod-super-secret-jwt-key # 替换为生成的密钥
|
||||||
JWT_EXPIRES_IN=1h
|
JWT_EXPIRES_IN=1h
|
||||||
JWT_REFRESH_EXPIRES_IN=30d
|
JWT_REFRESH_EXPIRES_IN=30d
|
||||||
ADMIN_TOKEN=prod-admin-token
|
ADMIN_TOKEN=prod-admin-token # 替换为生成的密钥
|
||||||
PORT=3000
|
PORT=3000
|
||||||
NODE_ENV=production
|
NODE_ENV=production
|
||||||
LOG_LEVEL=warn
|
LOG_LEVEL=warn
|
||||||
@ -362,10 +381,10 @@ LOG_LEVEL=warn
|
|||||||
|
|
||||||
```env
|
```env
|
||||||
DATABASE_URL=mysql://duoqi_test:test-password@your-rds-endpoint:3306/duoqi_test
|
DATABASE_URL=mysql://duoqi_test:test-password@your-rds-endpoint:3306/duoqi_test
|
||||||
JWT_SECRET=test-secret-key
|
JWT_SECRET=test-secret-key # 与生产环境不同
|
||||||
JWT_EXPIRES_IN=1h
|
JWT_EXPIRES_IN=1h
|
||||||
JWT_REFRESH_EXPIRES_IN=30d
|
JWT_REFRESH_EXPIRES_IN=30d
|
||||||
ADMIN_TOKEN=test-admin-token
|
ADMIN_TOKEN=test-admin-token # 与生产环境不同
|
||||||
PORT=3001
|
PORT=3001
|
||||||
NODE_ENV=test
|
NODE_ENV=test
|
||||||
LOG_LEVEL=debug
|
LOG_LEVEL=debug
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user