本帖最后由 MagicStarTrace 于 2026-1-29 19:34 编辑
红米/小米手机坐标GPS集成插件 已进入「必须重构」阶段的说明
插件历史版本传送门
https://bbs.hassbian.com/thread-29351-1-1.html
最近在调试 / 修复 xiaomi_cloud 自定义集成过程中确认:
当前版本基于:
serviceLoginAuth2 → STS → serviceToken
的纯 HTTP 自动化登录方式,已因小米云风控模型升级而整体失效
当前插件失败的真实原因
现有插件登录流程:
- GET https://i.mi.com/find 获取
_sign
- POST https://account.xiaomi.com/pass/serviceLoginAuth2
- 从 JSON 提取
ssecurity + nonce + location
- 请求
[url=https://i.mi.com/sts?...]https://i.mi.com/sts?...`[/url]
- 期望 Set-Cookie:
serviceToken
实际行为:
serviceLoginAuth2 返回 code=0
- 可拿到
ssecurity / nonce / location
- 但已不再返回
passToken / userId
- STS 永远 401
- 即使手工补
userId cookie 仍失败
结论:
小米已将该入口降级为「半登录态」
即:
- 看似登录成功
- 但不会发放完整 session
- STS 被强制拦截
这是服务器侧风控决策,不是客户端实现问题
插件为何不行?
- 无浏览器指纹
- 无行为上下文
- deviceId 每次变化
- 高频重试
行为被系统被判定为自动化行为
补充:
- 从浏览器导出的HAR中拿不到serviceToken(HTTP-only)
- JS 无法读取
- token只能由真实浏览器生成
继续 patch 现有插件已无工程意义
已尝试:
- clientSign 补齐
- userId / cUserId 注入
- cookie 手动写入
- followup 修正
- headers / UA 模拟
全部失败,原因:
serviceToken 已进入浏览器信任域
STS 只接受 browser session
继续修补请求参数无法解决。
重构方向
后续将调整为:
Playwright + 后端 Token Service + HA 插件
结构:[ Playwright 浏览器服务 ] → REST API → Home Assistant
- Playwright 维持真实登录态
- 自动刷新 serviceToken
- HA 插件只负责调用 API 获取坐标
这是目前能想到可尝试的长期使用方案[会基于该方向重构,后续会发布新的插件]
当然如有人已有实现了browser-token bridge 或者有其他方式,欢迎交流
|