【问题标题】:How to get device key using device id from IoT hub using C#?如何使用 C# 从 IoT 中心使用设备 ID 获取设备密钥?
【发布时间】:2020-08-23 00:20:17
【问题描述】:

我在 Azure 中创建了一个 IoT 中心。

使用以下代码将设备注册到 IoT 中心 -

 public async Task<HttpResponseMessage> RegisterDeviceAsyncData(DeviceData deviceApp)
        {
            

                        deviceApp.PlatformName = _appSettingsAccessor.GetAppSettingValue(DEFAULT_HUB_KEY);
   


                    var result = await _deviceRegistrationHandler.RegisterDeviceAsync(deviceApp);
               

                response = HttpResponseMessageFactory.CreateMessageWithObjectBody(results);
            }

它已成功将设备注册到 Iot hub,现在我想使用 C# 向这些设备发送数据。

我有代码可以向下面的设备发送数据,但我不知道如何获取特定设备的连接字符串或发送数据的密钥。

 private static async Task SendDeviceToCloudMessagesAsync()
        {
    DeviceClient deviceClient = DeviceClient.CreateFromConnectionString("deviceConnectionString");
            while (true)
            {

                string messageString = string.Empty;
                Message iotHubMsg = new Message();

                foreach (BaseMessage msg in currentDevice.Messages)
                {


                        iotHubMsg = msg.ReadAsIotHubMessage();

                    messageString = Encoding.UTF8.GetString(iotHubMsg.GetBytes());

                        //Send the current messages and clear them
                        await deviceClient.SendEventAsync(iotHubMsg);
                        }
                        }
                        }

目前我尝试使用portal.azure.com 获取连接字符串,但在注册设备后如何实时检索连接字符串?我可以使用 SAS 令牌或类似的东西吗?

【问题讨论】:

  • 注册设备的结果不是给你一个设备id吗?客户端需要为将来的请求保留它。
  • 我正在获取设备 ID,因为我是从请求中插入它,但是如何获取密钥/秘密密钥/主密钥我的意思是连接字符串中也存在密钥?

标签: c# azure azure-iot-hub


【解决方案1】:

我会尝试使用以下方法之一解决此问题:

  1. 使用通用设备连接字符串:
    a) 转到 IoT 中心并从“共享访问策略”获取“设备”策略的连接字符串(例如 HostName=iothub.azure-devices.net;SharedAccessKeyName=device;SharedAccessKey=abcd1234)
    b) 这是一个通用的连接字符串。如果您添加“DeviceId=”,它将特定于您的设备,并且 IotHub 将能够识别您的新/现有设备 (例如 HostName=iothub.azure-devices.net;SharedAccessKeyName=device;SharedAccessKey=abcd1234;DeviceId =device001)
  2. Azure Device provisioning Service 的帮助下使用自动设备配置。我从未亲自使用过它,但它应该可以工作。此外,如果您拥有大量设备,则应该采用这种方法。

希望这对您有所帮助。

【讨论】:

  • 我可以从 azure 门户 true 获取特定设备的连接字符串,但我希望使用代码,因为在注册设备后,我会将事件数据发送到该设备以及如何将数据发送到该特定设备哪个是现在创建的?
  • 当您创建设备时,您应该提供 deviceId,对吗?如果这是真的,那么使用我的第一种方法,您可以使用通用方法建立您的连接deviceConnectionString。通用的应该在您的本地配置中。您甚至可以尝试开发一个可以为您提供通用连接字符串的存储库(例如 REST API)。通过这种方式,您可以轻松地定期更改所有设备的密钥。
  • 哇,这是一件很棒的事情,我尝试使用此代码,这也有效,但您的方法很有意义,非常感谢:) ` deviceClient = DeviceClient.Create(iotHubUri, new DeviceAuthenticationWithRegistrySymmetricKey(deviceid, deviceKey ), TransportType.Mqtt);`
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
相关资源
最近更新 更多