Azure 配置服务示例不适用于节点

Azure Provisioning service example not working for node

我按照 node.js 教程通过 Azure DPS(设备配置服务)@ https://docs.microsoft.com/en-us/azure/iot-dps/quick-create-simulated-device-x509-node 注册了设备。 对于单个设备注册,它成功了,但是当我尝试通过注册组注册设备时,它失败了。 我使用 "create_test-cert.js root" 生成我的根证书并使用

create_test-cert.js verification --ca {rootcertificate_cert
.pem} --key {rootcertificate_key.pem} --nonce {verificationKey}

验证。 我还 used create_test-cert.js device {leafcertificate} {rootcertificate-name} 创建设备证书。 最后,我使用 register_x509.js 文件将我的设备注册到 Azure。执行这个文件我有以下错误

azure-iot-provisioning-device:X509Registration registrationId: first +0ms
  azure-iot-provisioning-device:PollingStateMachine register called for registrationId "first" +0ms
  azure-iot-provisioning-device:PollingStateMachine completed transition from disconnected to sendingRegistrationRequest +0ms
  azure-iot-provisioning-device-http:Http submitting PUT for first to /0ne00015676/registrations/first/register?api-version=2017-11-15 +0ms
  azure-iot-provisioning-device-http:Http {"registrationId":"first"} +0ms
  azure-iot-provisioning-device-http:Http error executing PUT: UnauthorizedError: Error: {"errorCode":401002,"trackingId":"e6b9c185-64c4-4535-8d23-a7625dd3e011","message":"Unauthorized","timestampUtc":"2018-04-23T12:21:56.1390465Z"} +353ms

错误代码“401002 是 IotHubUnauthorizedAccess”

谢谢

我用最新版本的SDK测试过。有用。以下是我的操作步骤。

更新:

  1. 使用命令生成根ca证书文件(testRootCert_cert.pem、testRootCert_fullchain.pem、testRootCert_key.pem将在tools文件夹中生成):

node create_test_cert.js root

  1. Certificates中添加名为"root"的证书,并上传根ca文件(testRootCert_cert.pem).

  2. 生成验证码并使用此命令创建验证ca文件,上传verification_cert.pem文件,状态"root"将是"Verified":

node create_test_cert.js verification --ca testRootCert_cert.pem --key testRootCert_key.pem --nonce {verification code}

  1. 按照此 guide 创建注册组,将创建名为 "first" 的注册组:

node create_enrollment_group.js "" "testRootCert_cert.pem"

  1. 通过以下命令生成设备注册到组的证书文件。

node create_test_cert.js device device01 testRootCert

  1. 复制 device01 _cert.pemdevice01 _fullchain.pemdevice01 _key.pem到'\device\samples'文件夹,并修改provisioning host,id scope,registration id(此处为'first'命名),cert filenamekey filename。请参考这个document.

var provisioningHost = '{your provisioning Host}'; var idScope = '{your id scope}'; var registrationId = 'device01'; var deviceCert = { cert: fs.readFileSync('device01_cert.pem').toString(), key: fs.readFileSync('device01_key.pem').toString() };

  1. 最后,运行node register_x509.js分配设备。该消息将显示为:
registration succeeded
assigned hub={iothub host}
deviceId=device01

请注意设备预配服务应链接到您的 IoT 中心。

感谢迈克尔,我意识到问题出在文档中。不清楚registrationid是叶子的registarationid而不是父证书的registrationid

"Replace registration id with the Registration Id noted in the previous section. " 应替换为 "Replace registration id with the Registration Id of the leaf previously generated"

.net 的配置服务示例也不起作用,link 因为它enter link description here。总是出现 system.argument 错误,值不能为空。然后我发现问题是 Environment.GetEnvironmentVariable(key) return null。我该如何处理这个错误?