public async Task RunSampleAsync() { // When registering with a symmetric key using a group enrollment, the provided key will not // work for a specific device, rather it must be computed based on two values: the group enrollment // key and the desired device Id. if (_parameters.EnrollmentType == EnrollmentType.Group) { _parameters.PrimaryKey = ComputeDerivedSymmetricKey(_parameters.PrimaryKey, _parameters.Id); } Console.WriteLine($"Initializing the device provisioning client..."); // For individual enrollments, the first parameter must be the registration Id, where in the enrollment // the device Id is already chosen. However, for group enrollments the device Id can be requested by // the device, as long as the key has been computed using that value. // Also, the secondary could could be included, but was left out for the simplicity of this sample. using var security = new SecurityProviderSymmetricKey( _parameters.Id, _parameters.PrimaryKey, null); using var transportHandler = GetTransportHandler(); ProvisioningDeviceClient provClient = ProvisioningDeviceClient.Create( _parameters.GlobalDeviceEndpoint, _parameters.IdScope, security, transportHandler); Console.WriteLine($"Initialized for registration Id {security.GetRegistrationID()}."); Console.WriteLine("Registering with the device provisioning service..."); DeviceRegistrationResult result = await provClient.RegisterAsync(); Console.WriteLine($"Registration status: {result.Status}."); if (result.Status != ProvisioningRegistrationStatusType.Assigned) { Console.WriteLine($"Registration status did not assign a hub, so exiting this sample."); return; } Console.WriteLine($"Device {result.DeviceId} registered to {result.AssignedHub}."); Console.WriteLine("Creating symmetric key authentication for IoT Hub..."); IAuthenticationMethod auth = new DeviceAuthenticationWithRegistrySymmetricKey( result.DeviceId, security.GetPrimaryKey()); Console.WriteLine($"Testing the provisioned device with IoT Hub..."); using DeviceClient iotClient = DeviceClient.Create(result.AssignedHub, auth, _parameters.TransportType); Console.WriteLine("Sending a telemetry message..."); using var message = new Message(Encoding.UTF8.GetBytes("TestMessage")); await iotClient.SendEventAsync(message); Console.WriteLine("Finished."); }
private async Task <DeviceRegistrationResult> RegisterDeviceAsync(SecurityProviderSymmetricKey security) { _logger.LogInformation("{time} - Register device...", DateTimeOffset.Now); using (var transport = new ProvisioningTransportHandlerMqtt(TransportFallbackType.TcpOnly)) { ProvisioningDeviceClient provClient = ProvisioningDeviceClient.Create(_globalDeviceEndpoint, _scopeID, security, transport); _logger.LogInformation($"{DateTimeOffset.Now} - RegistrationID = {security.GetRegistrationID()}"); DeviceRegistrationResult result = await provClient.RegisterAsync(); _logger.LogInformation($"{DateTimeOffset.Now} - ProvisioningClient AssignedHub: {result.AssignedHub}; DeviceID: {result.DeviceId}"); return(result); } }
public async Task <IoTHubDeviceClient> ProvisionDeviceAsync() { string connectionKey; IoTHubDeviceClient iotHubClient = null; Console.WriteLine("Provisioning..."); if (!String.IsNullOrEmpty(_deviceId) && !String.IsNullOrEmpty(s_sasKey) && !String.IsNullOrEmpty(s_idScope)) { connectionKey = GenerateSymmetricKey(); Console.WriteLine($"Connection Key : {connectionKey}"); using (var securityProvider = new SecurityProviderSymmetricKey(_deviceId, connectionKey, null)) using (var transport = new ProvisioningTransportHandlerMqtt(TransportFallbackType.TcpOnly)) { _provClient = ProvisioningDeviceClient.Create(s_global_endpoint, s_idScope, securityProvider, transport); // Sanity check Console.WriteLine($"Device ID : {securityProvider.GetRegistrationID()}"); DeviceRegistrationResult result = await _provClient.RegisterAsync().ConfigureAwait(false); if (result.Status == ProvisioningRegistrationStatusType.Assigned) { Console.WriteLine($"Provisioned : {result.Status}"); Console.WriteLine($" Device ID : {result.DeviceId}"); Console.WriteLine($" IoT Hub : {result.AssignedHub}"); IAuthenticationMethod authenticationMethod = new DeviceAuthenticationWithRegistrySymmetricKey(result.DeviceId, securityProvider.GetPrimaryKey()); iotHubClient = new IoTHubDeviceClient(result.AssignedHub, authenticationMethod); } else { Console.WriteLine($"Err : Provisioning Failed {result.Status}"); } } } else { Console.WriteLine("Please set following Environment Variables"); Console.WriteLine("DPS_IDSCOPE : ID Scope"); Console.WriteLine("SAS_KEY : SAS Key"); } return(iotHubClient); }
public static async Task <DeviceRegistrationResult> RegisterDeviceAsync(SecurityProviderSymmetricKey security) { Console.WriteLine("Register device..."); using (var transport = new ProvisioningTransportHandlerMqtt(TransportFallbackType.TcpOnly)) { ProvisioningDeviceClient provClient = ProvisioningDeviceClient.Create(GlobalDeviceEndpoint, ScopeID, security, transport); Console.WriteLine($"RegistrationID = {security.GetRegistrationID()}"); Console.Write("ProvisioningClient RegisterAsync..."); DeviceRegistrationResult result = await provClient.RegisterAsync(); Console.WriteLine($"{result.Status}"); return(result); } }
public override AmqpSettings CreateAmqpSettings(string idScope) { var settings = new AmqpSettings(); var saslProvider = new SaslTransportProvider(); saslProvider.Versions.Add(AmqpConstants.DefaultProtocolVersion); settings.TransportProviders.Add(saslProvider); SaslPlainHandler saslHandler = new SaslPlainHandler(); saslHandler.AuthenticationIdentity = $"{idScope}/registrations/{_security.GetRegistrationID()}"; string key = _security.GetPrimaryKey(); saslHandler.Password = ProvisioningSasBuilder.BuildSasSignature("registration", key, saslHandler.AuthenticationIdentity, TimeSpan.FromDays(1)); saslProvider.AddHandler(saslHandler); return(settings); }
public async Task RunSampleAsync() { Console.WriteLine($"Initializing the device provisioning client..."); using var security = new SecurityProviderSymmetricKey( this.id, this.key, null); using var transportHandler = new ProvisioningTransportHandlerAmqp(); ProvisioningDeviceClient provClient = ProvisioningDeviceClient.Create( "global.azure-devices-provisioning.net", this.idScope, security, transportHandler); Console.WriteLine($"Initialized for registration Id {security.GetRegistrationID()}."); Console.WriteLine("Registering with the device provisioning service..."); DeviceRegistrationResult device = await provClient.RegisterAsync(); Console.WriteLine($"Registration status: {device.Status}."); if (device.Status != ProvisioningRegistrationStatusType.Assigned) { Console.WriteLine($"Registration status did not assign a hub, so exiting this sample."); return; } Console.WriteLine($"Device {device.DeviceId} registered to {device.AssignedHub}."); Console.WriteLine("Creating symmetric key authentication for IoT Hub..."); IAuthenticationMethod auth = new DeviceAuthenticationWithRegistrySymmetricKey( device.DeviceId, security.GetPrimaryKey()); await SendDeviceToCloudMessagesAsync(device, auth); Console.WriteLine("Finished."); }
public async Task <DeviceRegistrationResult> RegisterDeviceAsync(SecurityProviderSymmetricKey security) { Console.WriteLine("Register device..."); billingloginS = _BillingData.GetSubscriber_IDlogin(User.Identity.Name); if (billingloginS == null) { return(null); } int Subscriber_ID = 0; Subscriber_ID = billingloginS.Subscriber_ID; if (Subscriber_ID > 0) { IOTDEviceDetail = _DeviceData.GetIOTDEviceDetailsBySubscriberId(Subscriber_ID); } if (IOTDEviceDetail == null) { return(null); } using (var transport = new ProvisioningTransportHandlerMqtt(TransportFallbackType.WebSocketOnly)) { ProvisioningDeviceClient provClient = ProvisioningDeviceClient.Create(GlobalDeviceEndpoint, IOTDEviceDetail.ScopeID, security, transport); Console.WriteLine($"RegistrationID = {security.GetRegistrationID()}"); Console.Write("ProvisioningClient RegisterAsync..."); DeviceRegistrationResult result = await provClient.RegisterAsync(); Console.WriteLine($"{result.Status}"); return(result); } }
public async Task <string> ProvisionDevice() { string result = string.Empty; string logPrefix = "DPSProvisioningService.ProvisionDevice".BuildLogPrefix(); // When registering with a symmetric key using a group enrollment, the provided key will not // work for a specific device, rather it must be computed based on two values: the group enrollment // key and the desired device Id. if (_dpsSettings.EnrollmentType == EnrollmentType.Group) { if (_dpsSettings.GroupEnrollment == null) { throw new ArgumentNullException("_dpsSettings.GroupEnrollment", "No group enrollment settings have been found."); } if (_dpsSettings.GroupEnrollment.SecurityType == SecurityType.SymmetricKey) { _dpsSettings.GroupEnrollment.SymmetricKeySettings.PrimaryKey = ProvisioningTools.ComputeDerivedSymmetricKey(_dpsSettings.GroupEnrollment.SymmetricKeySettings.PrimaryKey, _deviceSettingsDelegate.CurrentValue.DeviceId); } } _logger.LogDebug($"{logPrefix}::{_deviceSettingsDelegate.CurrentValue.ArtifactId}::Initializing the device provisioning client..."); // For individual enrollments, the first parameter must be the registration Id, where in the enrollment // the device Id is already chosen. However, for group enrollments the device Id can be requested by // the device, as long as the key has been computed using that value. // Also, the secondary could could be included, but was left out for the simplicity of this sample. using (var security = new SecurityProviderSymmetricKey(_deviceSettingsDelegate.CurrentValue.DeviceId, _dpsSettings.GroupEnrollment.SymmetricKeySettings.PrimaryKey, null)) { using (var transportHandler = ProvisioningTools.GetTransportHandler(_dpsSettings.GroupEnrollment.SymmetricKeySettings.TransportType)) { ProvisioningDeviceClient provClient = ProvisioningDeviceClient.Create( _dpsSettings.GroupEnrollment.SymmetricKeySettings.GlobalDeviceEndpoint, _dpsSettings.GroupEnrollment.SymmetricKeySettings.IdScope, security, transportHandler); _logger.LogDebug($"{logPrefix}::{_deviceSettingsDelegate.CurrentValue.ArtifactId}::Initialized for registration Id {security.GetRegistrationID()}."); _logger.LogDebug($"{logPrefix}::{_deviceSettingsDelegate.CurrentValue.ArtifactId}::Registering with the device provisioning service..."); DeviceRegistrationResult deviceRegistrationResult = await provClient.RegisterAsync(); if (deviceRegistrationResult != null) { _logger.LogDebug($"{logPrefix}::{_deviceSettingsDelegate.CurrentValue.ArtifactId}::Registration status: {deviceRegistrationResult.Status}."); if (deviceRegistrationResult.Status != ProvisioningRegistrationStatusType.Assigned) { _logger.LogWarning($"{logPrefix}::{_deviceSettingsDelegate.CurrentValue.ArtifactId}::Device registration process did not assign an IoT Hub."); } else { _logger.LogDebug($"{logPrefix}::{_deviceSettingsDelegate.CurrentValue.ArtifactId}::Device {deviceRegistrationResult.DeviceId} registered to {deviceRegistrationResult.AssignedHub}."); _logger.LogDebug($"{logPrefix}::{_deviceSettingsDelegate.CurrentValue.ArtifactId}::Creating symmetric key authentication for IoT Hub..."); var devicePrimaryKey = security.GetPrimaryKey(); //IAuthenticationMethod auth = new DeviceAuthenticationWithRegistrySymmetricKey(deviceRegistrationResult.DeviceId, devicePrimaryKey); //_logger.LogDebug($"{logPrefix}::{_deviceSettings.ArtifactId}::Testing the provisioned device with IoT Hub..."); //using (DeviceClient iotClient = DeviceClient.Create(deviceRegistrationResult.AssignedHub, auth, _dpsSettings.GroupEnrollment.SymmetricKeySettings.TransportType)) //{ // _logger.LogDebug($"{logPrefix}::{_deviceSettings.ArtifactId}::Sending a telemetry message after provisioning to test the process..."); // using var message = new Message(Encoding.UTF8.GetBytes("TestMessage")); // await iotClient.SendEventAsync(message); // _logger.LogDebug($"{logPrefix}::{_deviceSettings.ArtifactId}::Finished."); //} result = $"HostName={deviceRegistrationResult.AssignedHub};DeviceId={deviceRegistrationResult.DeviceId};SharedAccessKey={devicePrimaryKey}"; } } else { _logger.LogError($"{logPrefix}::{_deviceSettingsDelegate.CurrentValue.ArtifactId}::No provisioning result has been received."); } } } return(result); }
public override DeviceRegistration CreateDeviceRegistration() { return(new DeviceRegistration(_security.GetRegistrationID())); }