You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure IoT C SDK设备通过DPS注册组预配持续失败求助

排查Azure DPS注册组对称密钥预配401未授权问题

核心排查方向

  • 注册组密钥不能直接使用:DPS注册组的对称密钥是根密钥,必须结合设备ID生成派生密钥才能用于设备认证,直接传入根密钥会导致签名验证失败,返回401。
  • 派生密钥计算必须准确:用设备ID和注册组根密钥生成HMAC-SHA256哈希,再将结果做Base64编码,得到的才是设备的有效认证密钥。

具体验证步骤

  1. 检查密钥计算逻辑
    确保代码中实现了正确的派生密钥生成逻辑,示例代码如下:

    #include <openssl/hmac.h>
    #include <openssl/evp.h>
    #include "base64.h" // 需引入SDK中的Base64编码工具
    
    // 注册组根密钥(主密钥或次密钥)
    const char* registration_group_key = "YOUR_REGISTRATION_GROUP_PRIMARY_KEY";
    // 设备ID,需与预配时使用的ID完全一致
    const char* device_id = "YOUR_DEVICE_ID";
    
    unsigned char hmac_result[EVP_MAX_MD_SIZE];
    unsigned int hmac_length;
    
    // 计算HMAC-SHA256哈希
    HMAC(EVP_sha256(), registration_group_key, strlen(registration_group_key),
         (unsigned char*)device_id, strlen(device_id), hmac_result, &hmac_length);
    
    // 哈希结果转Base64编码
    char* derived_symmetric_key = base64_encode(hmac_result, hmac_length);
    
    // 设置派生后的密钥
    prov_dev_set_symmetric_key_info(device_id, derived_symmetric_key);
    
  2. 验证设备ID格式
    设备ID只能包含字母、数字、连字符(-)、下划线(_)、句号(.)、冒号(:),长度不超过128字符,特殊字符会导致哈希计算异常。

  3. 检查DPS注册组配置

    • 确认注册组状态为已启用,未被禁用;
    • 确认分配策略与设备ID的哈希匹配(比如哈希分配模式下,设备ID的哈希需落在注册组的分配范围内);
    • 确认DPS与IoT Hub的关联关系正常,未被修改或断开。

错误日志分析

如果你的错误日志包含类似以下内容,可直接确认是派生密钥计算错误导致的签名验证失败:

{"errorCode":401002,"trackingId":"xxxxxx","message":"Signature validation failed","timestampUtc":"xxxx-xx-xxTxx:xx:xx.xxxZ"}

额外验证手段

可以用Azure CLI手动计算派生密钥,对比代码生成的结果是否一致:

az iot dps enrollment-group compute-device-key --dps-name YOUR_DPS_NAME --resource-group YOUR_RG --enrollment-id YOUR_ENROLLMENT_GROUP_ID --device-id YOUR_DEVICE_ID

将CLI输出的密钥与代码生成的derived_symmetric_key对比,若不一致则说明代码中的哈希或Base64编码逻辑存在问题。

内容的提问来源于stack exchange,提问作者Engineer999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:43:34