目标
为 HomeGuard 的核心唤醒操作引入 TOTP 验证机制,防止未经授权的远程触发,提升服务的安全性,特别是在启用远程 Listener 时。
描述
本功能旨在实现一个可配置的 TOTP 验证层,它应能集成到所有 Listener 的处理逻辑中。
1. 配置和初始化
2. 验证流程 (Verification Flow)
HomeGuard 需要验证用户提交的一次性密码 (OTP)。
- HTTP API (GET/POST):
- 请求中必须携带一个额外的参数
otp 或字段 otp,例如:http://.../wakeup?device=desktop&otp=123456
- 在执行唤醒前,验证
otp 是否与当前或前一个时间窗口生成的 TOTP 匹配。
- MQTT / Telegram Bot:
- 在命令负载中(MQTT)或命令文本中(Telegram),要求用户包含 OTP,例如:
- MQTT Payload:
{"device": "desktop", "otp": "123456"}
- Telegram Command:
/wake desktop 123456
- 验证实现: 利用 Go 语言成熟的 TOTP 库(例如
github.com/pquerna/otp/totp)来实现验证逻辑。
3. 错误处理
- 如果请求中未提供 OTP 或 OTP 验证失败,应返回明确的错误信息(例如 HTTP 401 Unauthorized 或在 Telegram 中回复验证失败)。
- 应允许验证当前时间窗口和前一个时间窗口的 OTP,以应对轻微的时钟偏差。
预期价值
- 高安全性: 即使外部攻击者知道了您的 API 地址或 MQTT 主题,也无法随意触发唤醒。
- 防止误操作: 作为一个“高消耗”的操作,增加验证门槛可以有效防止意外触发。
目标
为 HomeGuard 的核心唤醒操作引入 TOTP 验证机制,防止未经授权的远程触发,提升服务的安全性,特别是在启用远程 Listener 时。
描述
本功能旨在实现一个可配置的 TOTP 验证层,它应能集成到所有 Listener 的处理逻辑中。
1. 配置和初始化
配置: 在
config.yaml中新增一个可选的security:配置块,用于存储 TOTP 的密钥。密钥生成: 在 HomeGuard 启动时,如果
totp_secret留空,应在日志中输出一个临时的 Base32 密钥和用于扫码的 QR 码 URL,方便用户首次配置。2. 验证流程 (Verification Flow)
HomeGuard 需要验证用户提交的一次性密码 (OTP)。
otp或字段otp,例如:http://.../wakeup?device=desktop&otp=123456otp是否与当前或前一个时间窗口生成的 TOTP 匹配。{"device": "desktop", "otp": "123456"}/wake desktop 123456github.com/pquerna/otp/totp)来实现验证逻辑。3. 错误处理
预期价值