抱歉,你的浏览器不支持 JavaScript!
登录

如何恢复忘记的 IAMMETER 管理员密码

如果忘记了 IAMMETER 电能表本地 Web 界面的管理员用户名或密码,无需旧凭据也能恢复访问。IAMMETER 的签名恢复流程会验证设备归属、关闭 Admin Security,并清除忘记的本地管理员凭据。

本指南专门用于忘记 Admin Security 密码的情况。如果仍知道当前凭据,请从设备的 Security 选项卡更改或关闭。关于设置、受保护 API 访问和服务控制,请参阅本地 Admin Security 用户指南。

本页目录

恢复流程会执行哪些操作

恢复流程包含三个部分:

  1. IAMMETER 设备生成绑定该设备的一次性恢复 payload。
  2. IAMMETER Contributor 服务验证已登录账号是否有权管理该设备 SN,然后对该完整 payload 签名。
  3. 设备验证 Ed25519 签名,清除忘记的凭据并关闭 Admin Security。

恢复不会删除能耗数据、Wi-Fi 设置或设备配置。恢复后,可以打开本地 Web 界面并设置新的管理员用户名和密码。

开始前的准备

需要准备:

  • 在同一个局域网内访问 IAMMETER 设备;
  • 设备的本地 IP 地址;
  • 有权管理该设备 SN 的 IAMMETER 账号;
  • 一台能够访问设备本地 Web 界面的电脑及其浏览器。只有选择手动提交方式时才需要 curl 或其他 HTTP 客户端。

打开以下地址,可以检查已安装固件是否支持签名恢复:

http://<device-ip>/api/admin/status

在响应中查找 "recoverySupported":1。如果恢复端点不可用,请先升级至兼容固件版本,或联系 IAMMETER 支持,再继续操作。

**重要:**挑战中包含一次性 nonce。保持设备通电,在恢复 POST 完成前不要再次请求挑战。生成新挑战或重启设备都会使之前的 payload 失效。

步骤 1:生成一次性恢复 payload

在浏览器打开以下 URL,将 <device-ip> 替换为 IAMMETER 设备的本地 IP 地址:

http://<device-ip>/api/admin/recovery_challenge

也可以使用 curl 请求挑战:

curl "http://<device-ip>/api/admin/recovery_challenge"

设备返回类似以下响应:

{
  "successful": 1,
  "alg": "ed25519",
  "payload": "reset_admin|DEVICE_SN|DEVICE_MAC|ONE_TIME_NONCE"
}

复制完整的 payload 值。不要修改其中的字符、分隔符、字母大小写、设备 SN、MAC 地址或 nonce。

从 IAMMETER 电能表生成一次性 Admin Security 恢复 payload

复制 payload 后,不要刷新挑战页面,也不要再次调用 /api/admin/recovery_challenge。每次请求都会立即使之前的挑战失效。

步骤 2:获取签名恢复响应

登录 IAMMETER Contributor 系统并打开:

IAMMETER Admin Recovery

粘贴步骤 1 的完整 payload 并提交。服务会检查 payload 中的设备 SN 是否关联到你的账号。验证通过后,返回针对该完整 payload 的 Ed25519 签名。

在 IAMMETER Admin Recovery 应用中生成 Ed25519 恢复签名

签名仅对步骤 1 中设备生成且未经修改的 payload 有效。如果计划使用 curl 手动提交恢复请求,请原样复制返回的签名。如果同一浏览器能通过局域网访问设备,可直接在 Contributor 页面完成下一步。

步骤 3:将 payload 和签名提交给设备

方式 A:直接在浏览器中完成恢复

如果运行浏览器的电脑与 IAMMETER 设备在同一网络,且浏览器能够打开设备的本地 Web 界面,可以直接从 Contributor Admin Recovery 页面发送签名恢复结果:

  1. 在 **Step 3: Send to your device(步骤 3:发送到设备)**中输入设备的本地 IP 地址。
  2. 使用页面上的恢复操作,将带签名的 payload 发送给设备。
  3. 等待 Recovery completed(恢复完成)。这表示设备已接受签名结果、清除现有本地管理员用户名和密码,并关闭 Admin Security。

浏览器与设备在同一局域网时,直接从 Contributor 页面完成 IAMMETER Admin Security 密码恢复

此浏览器方式无需将恢复 JSON 复制到单独的命令中。只有浏览器能够直接连接设备本地 IP 地址时才能使用。

方式 B:使用 curl 手动提交恢复请求

运行以下命令,并替换:

  • 将 <device-ip> 替换为设备的本地 IP 地址;
  • 将 <original-payload> 替换为步骤 1 的完整 payload;
  • 将 <signature> 替换为步骤 2 返回的签名。
curl -X POST "http://<device-ip>/api/admin/recovery" \
  -H "Content-Type: application/json" \
  -d '{"payload":"<original-payload>","signature":"<signature>"}'

示例:

curl -X POST "http://192.168.1.100/api/admin/recovery" \
  -H "Content-Type: application/json" \
  -d '{"payload":"reset_admin|DEVICE_SN|DEVICE_MAC|ONE_TIME_NONCE","signature":"128_HEX_CHARACTER_SIGNATURE"}'

此请求中的 payload 必须与 Contributor 服务签名的 payload 完全一致。

也可以从 IAMMETER WEM API Test - Admin Security Public 页面发送同样的恢复请求。打开 POST /api/admin/recovery 操作,提供相同的恢复 JSON,并使用能访问设备本地 IP 地址的浏览器发送。Swagger 请求直接发往设备,不经过 IAMMETER Cloud 代理。

验证成功后,设备会:

  • 清除现有的本地管理员用户名和密码;
  • 关闭 Admin Security;
  • 使恢复 nonce 失效,防止再次使用同一 payload 和签名。

打开设备本地 Web 界面,进入 Security 选项卡。如果希望重新启用 Admin Security,请配置新的管理员用户名和密码。

密码恢复故障排查

签名被拒绝

最常见的原因是在生成第一个 payload 后又请求了新的恢复挑战。请请求一个新 payload,获取其签名,并在不刷新挑战页面的情况下提交匹配的一对 payload 和签名。

以下情况也会导致签名被拒绝:

  • 设备在生成 payload 后重启;
  • payload 被编辑;
  • 签名属于其他 payload 或设备;
  • 同一 payload 和签名已经成功使用过。

设备报告内存不足

Ed25519 验证需要足够的空闲内存。设备可能返回类似响应:

{
  "successful": 0,
  "message": "low memory, please change to standalone mode",
  "freeMemory": 18000,
  "minFreeRequired": 28000
}

重启设备释放临时内存,然后生成新的 payload,并及时完成恢复。重启前创建的 payload 不能重复使用。

为什么恢复需要带签名的一次性挑战

IAMMETER 不提供用于绕过管理员保护、无需认证的恢复出厂设置命令,而是采用以下流程:

  • 设备创建包含恢复操作、设备 SN、MAC 地址和随机一次性 nonce 的 payload;
  • Contributor 服务验证已登录的 IAMMETER 账号是否有权管理该设备 SN;
  • IAMMETER 使用 Ed25519 私钥对该完整 payload 签名;
  • 设备使用固件内置公钥验证签名;
  • 新挑战、重启或成功恢复都会使当前 nonce 失效。

将授权同时绑定到设备身份和一次性 nonce,可防止之前截获的 payload 和签名在之后被再次使用。

相关 IAMMETER 安全文档

EN 18031 文章介绍安全相关固件工作,不应理解为某款电能表的证书已颁发。认证详情将在正式可用时另行发布。

顶部