Files
smsweb/README.md
OpenClaw Agent 1d886ce68d feat: 添加纯 Token 认证模式 (Token Only Mode)
- 新增 TOKEN_ONLY_MODE 配置项,支持跳过 HMAC 签名验证
- 纯 Token 模式下只验证 token 参数,简化配置
- 添加 TOKEN_ONLY_MODE.md 详细文档
- 设置页面显示当前模式状态
- 更新 README.md 说明新功能
- config.example.json 添加 token_only_mode 配置项

适用于 TranspondSms 不支持签名的场景。
2026-02-07 00:55:46 +00:00

256 lines
6.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 短信转发接收端
基于 TranspondSms Android APP 的短信转发接收后台
## 功能特性
-**登录验证** - 需要登录才能查看和管理短信
-**Token/Secret 可选配置** - 支持在 config.json 中配置多个 API Token
-**接收 Android APP 转发的短信** - POST multipart/form-data
-**HMAC-SHA256 签名验证** - 可选的安全机制
-**纯 Token 认证模式** - 跳过签名验证,只验证 token查看 [TOKEN_ONLY_MODE.md](TOKEN_ONLY_MODE.md)
-**SQLite 数据库存储**
-**Web 管理界面** - 查看实时短信、日志、统计
-**时区支持** - 自动转换为本地时间(默认 Asia/Shanghai
-**RESTful API 支持**
-**自动刷新** - 短信列表30秒自动刷新
## 快速启动
```bash
# 进入项目目录
cd /root/.openclaw/workspace/sms-receiver
# 启动服务
python3 app.py
```
服务将运行在 `http://127.0.0.1:9518`
## 配置说明
### config.json 配置文件
创建或编辑 `config.json` 文件:
```json
{
"server": {
"host": "0.0.0.0",
"port": 9518,
"debug": true
},
"security": {
"enabled": true,
"username": "admin",
"password": "admin123",
"session_lifetime": 3600,
"secret_key": "default_secret_key_change_me",
"sign_verify": true,
"sign_max_age": 3600000
},
"sms": {
"max_messages": 10000,
"auto_cleanup": true,
"cleanup_days": 30
},
"database": {
"path": "sms_receiver.db"
},
"timezone": "Asia/Shanghai",
"api_tokens": [
{
"name": "默认配置",
"token": "default_token",
"secret": "your_secret_here",
"enabled": true
},
{
"name": "设备1",
"token": "device1_token",
"secret": "device1_secret",
"enabled": true
}
]
}
```
### 配置项说明
| 项 | 说明 | 默认值 |
|----|------|--------|
| `security.enabled` | 是否启用登录验证 | true |
| `security.username` | 登录用户名 | admin |
| `security.password` | 登录密码 | admin123 |
| `security.session_lifetime` | 会话有效期(秒) | 3600 |
| `security.secret_key` | Flask 会话密钥 | - |
| `security.sign_verify` | 是否验证签名 | true |
| `security.sign_max_age` | 签名最大有效时间(毫秒) | 3600000 |
| `api_tokens` | API Token 配置列表 | - |
| `timezone` | 时区 | Asia/Shanghai |
### API Token 配置
每个 Token 配置包含:
- `name`: 配置名称(可选)
- `token`: Token 值,需要在 TranspondSms APP 中填写
- `secret`: 密钥,可选,填写后启用签名验证
- `enabled`: 是否启用此 Token
**注意**
- Token 和 Secret 都是可选的
- 不填 Secret 时跳过签名验证
- 可以配置多个 Token 供多个设备使用
- enabled 为 false 时该 Token 不可用
## 配置 TranspondSms APP
在 Android APP 的"网页通知"配置中:
### 基础配置(无 Token
- **Token (URL)**: `http://your-server-ip:9518/api/receive`
- **Secret**: 留空
### 使用 Token 配置
如果你在 `config.json` 中配置了 Token
- **Token (URL)**: `http://your-server-ip:9518/api/receive`
- **Secret**: 根据你要使用的 Token 配置填写
**注意**TranspondSms APP 的设置中,没有专门的 Token 字段。你需要通过以下方式传递 Token
1. **方法一**:在 URL 中携带 Token
```
http://your-server-ip:9518/api/receive?token=your_token
```
2. **方法二**:在 Secret 字段中填写 `<token>|<secret>`
```
my_token|my_secret
```
然后修改代码解析这个格式(需自行实现)
**当前实现**在短信接收时TranspondSms APP 会发送一个 `token` 参数,系统会自动匹配对应的 secret。
目前 TranspondSms APP 的 Token 参数默认会放在请求的 query string 中:
```
POST /api/receive?token=your_token
Content-Type: multipart/form-data
```
如需传递多个设备的不同 Token在 APP 中添加多个网页通知配置即可。
## 登录功能
### 默认登录信息
- **用户名**: admin
- **密码**: admin123
首次使用后,请立即修改 `config.json` 中的 `security.username` 和 `security.password`。
### 会话管理
- 会话默认有效期1小时3600秒
- 超时后需要重新登录
- 可以通过 `security.session_lifetime` 调整
### 禁用登录
如果不需要登录验证,设置 `config.json`
```json
{
"security": {
"enabled": false
}
}
```
## API 接口
### 接收短信
```
POST /api/receive?token=your_token
Content-Type: multipart/form-data
参数:
- token: API Token可选用于匹配 secret
- from: 发送方手机号(必填)
- content: 短信内容(必填)
- timestamp: 时间戳(毫秒,可选)
- sign: 签名(可选)
- device: 设备信息(可选)
- sim: SIM 卡信息(可选)
```
### 查询短信列表(需要登录)
```
GET /api/messages?page=1&limit=20
```
### 查询统计信息(需要登录)
```
GET /api/statistics
```
## 时区配置
系统默认使用 `Asia/Shanghai` 时区UTC+8
在 `config.json` 中修改时区:
```json
{
"timezone": "America/New_York"
}
```
支持的时区名称参考https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
## 安全建议
1. **修改默认密码**:首次使用后立即修改登录密码
2. **修改 Secret Key**:修改 `security.secret_key` 为随机字符串
3. **使用 HTTPS**生产环境建议配置反向代理Nginx + Let's Encrypt
4. **启用签名验证**:设置 Token 的 secret 启用签名,防止伪造请求
5. **会话超时**:设置合理的 `session_lifetime`
## 默认配置说明
| 配置 | 默认值 | 说明 |
|------|--------|------|
| 端口 | 9518 | Web 服务监听端口 |
| 数据库 | sms_receiver.db | SQLite 数据库文件 |
| 时区 | Asia/Shanghai | 武汉时间 UTC+8 |
| 会话有效期 | 3600 秒 | 1小时 |
| 最多保留短信 | 10000 条 | 超过自动清理 |
| 自动刷新间隔 | 30 秒 | SMS 列表自动刷新时间 |
## 项目文件
```
/root/.openclaw/workspace/sms-receiver/
├── app.py # Flask 主应用
├── config.json # 配置文件(需创建)
├── config.py # 配置加载器
├── database.py # SQLite 数据库模型
├── sign_verify.py # HMAC-SHA256 签名验证
├── requirements.txt # 依赖包
├── templates/ # HTML 模板
│ ├── login.html # 登录页面
│ ├── index.html # 主页(短信列表)
│ ├── message_detail.html # 短信详情
│ ├── logs.html # 接收日志
│ ├── statistics.html # 统计信息
│ └── error.html # 错误页面
└── README.md # 本文档
```