DEV Community

Daniel Olivares
Daniel Olivares

Posted on • Edited on

Protege tu cliente MQTT en C# con autenticación básica

Siempre es tentador usar ejemplos rápidos sin credenciales, pero en un escenario real debes autenticar tu cliente MQTT. En este post veremos cómo añadir autenticación básica en C# y hablaremos de los riesgos de fuerza bruta y cómo mitigarlos.


Configuración de autenticación básica

Con la librería MQTTnet, basta con llamar a .WithCredentials() al construir las opciones:

using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Client.Options;
using System;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var options = new MqttClientOptionsBuilder()
            .WithTcpServer("broker.hivemq.com", 1883)
            .WithClientId("dotnet-iot-secure-demo")
            .WithCredentials("miUsuario", "miContrasenaSegura") // ← autenticación básica
            .Build();

        var factory = new MqttFactory();
        var client = factory.CreateMqttClient();

        client.UseConnectedHandler(async _ =>
        {
            Console.WriteLine("Conectado con autenticación básica");
            await client.SubscribeAsync("iot/door/status");
        });

        client.UseApplicationMessageReceivedHandler(e =>
        {
            var payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
            Console.WriteLine($"Mensaje: {payload}");
        });

        await client.ConnectAsync(options);
        Console.WriteLine("Presiona ENTER para salir...");
        Console.ReadLine();
    }
}
Enter fullscreen mode Exit fullscreen mode

Nota: Aunque usas usuario/contraseña, es crucial que tu broker esté configurado para TLS (puerto 8883) si quieres proteger las credenciales en tránsito.

Buenas prácticas para reforzar la seguridad Contraseñas robustas

Usa longitudes ≥16 caracteres, mezcla de mayúsculas, minúsculas, números y símbolos.

Limitación de intentos
Implementa bloqueo temporal tras N intentos fallidos (e.g., 5 intentos = bloqueo 5 min).

Filtrado por IP
Permite conexiones solo desde rangos confiables (por ejemplo, tu red corporativa).

TLS obligatorio
Nunca envíes credenciales en texto plano; configura tu cliente y broker para usar TLS.

var options = new MqttClientOptionsBuilder()
    .WithTcpServer("tu-broker-seguro.com", 8883)   // puerto estándar TLS
    .WithClientId("cliente-seguro-csharp")
    .WithCredentials("usuario", "contraseña")
    .WithTls(new MqttClientOptionsBuilderTlsParameters {
        UseTls = true,
        AllowUntrustedCertificates = false,         // rechaza certs no válidos
        IgnoreCertificateChainErrors = false,
        IgnoreCertificateRevocationErrors = false
    })
    .Build();
Enter fullscreen mode Exit fullscreen mode

Rotación de credenciales
Cambia usuario/contraseña periódicamente (cada 3–6 meses).

Monitorización y alertas
Registra intentos fallidos y configura notificaciones si superan un umbral.

Top comments (0)