La autenticación en EMQ X se refiere a controlar el permiso del cliente para conectarse al servidor a través de la configuración del lado del servidor cuando un cliente se conecta a EMQ X.
El soporte de certificación de EMQ X incluye dos niveles:
El propio protocolo MQTT especifica el nombre de usuario y la contraseña en el mensaje CONNECT. EMQ X admite varias formas de autenticación basadas en el nombre de usuario, ClientID, HTTP, JWT, LDAP y varias bases de datos como MongoDB, MySQL, PostgreSQL, Redis, etc. forma de complementos.
En la capa de transporte, TLS garantiza la autenticación de cliente a servidor mediante certificados de cliente y garantiza que el servidor verifique el certificado del servidor ante el cliente. También se admite la autenticación TLS/DTLS basada en PSK.
método de verificación
EMQ X admite el uso de fuentes de datos integradas (archivos, bases de datos integradas), JWT, bases de datos externas convencionales y API HTTP personalizadas como fuentes de datos de autenticación.
La conexión a fuentes de datos y la lógica de autenticación se implementan a través de complementos. Cada complemento corresponde a un método de autenticación y el complemento correspondiente debe habilitarse antes de su uso.
Cuando el cliente se conecta, el complemento lo autentica verificando si su nombre de usuario/identificador de cliente y contraseña son consistentes con la información de la fuente de datos especificada.
Métodos de autenticación soportados por EMQ X:
fuente de datos incorporada
Autenticación de nombre de usuario
Autenticación de ID de cliente
Utilice archivos de configuración y la base de datos integrada de EMQ X para proporcionar fuentes de datos de autenticación y administre a través de la API HTTP, que es bastante simple y liviana.
base de datos externa
Autenticación LDAP
Certificación MySQL
Certificación PostgreSQL
Autenticación de Redis
Certificación MongoDB
La base de datos externa puede almacenar una gran cantidad de datos y al mismo tiempo facilita la integración con el sistema de gestión de equipos externos.
otro
autenticación HTTP
Autenticación JWT
La autenticación JWT puede emitir información de autenticación en lotes, y la autenticación HTTP puede implementar una lógica de autenticación y autenticación compleja.
Después de cambiar la configuración del complemento, debe reiniciar el complemento para que surta efecto. Algunos complementos de autenticación incluyen la función ACL
Resultado de la certificación
Cualquier método de autenticación eventualmente devolverá un resultado:
Autenticación exitosa: después de comparar la autenticación del cliente es exitosa
Error de autenticación: después de comparar el error de autenticación del cliente, la contraseña en la fuente de datos no es consistente con la contraseña actual
Ignorar la autenticación (ignorar): no se encuentran datos de autenticación en el método de autenticación actual y es imposible juzgar explícitamente si el resultado es exitoso o fallido.
autenticación anónima
La autenticación anónima está habilitada en la configuración predeterminada de EMQ X y cualquier cliente puede acceder a EMQ X. Cuando el complemento de autenticación no está habilitado o el complemento de autenticación no permite/niega (ignora) explícitamente la solicitud de conexión, EMQ X decidirá si permite que el cliente se conecte de acuerdo con la habilitación de la autenticación anónima.
Configure el interruptor de autenticación anónima:
# etc/emqx.conf
## Value: true | false
allow_anonymous = true
Desactive la autenticación anónima en el entorno de producción.
Nota: Necesitamos ingresar al contenedor para modificar la configuración y luego reiniciar el servicio EMQ X.
# etc/plugins/emqx_auth_mysql.conf
## 不加盐,仅做哈希处理
auth.mysql.password_hash = sha256
## salt 前缀:使用 sha256 加密 salt + 密码 拼接的字符串
auth.mysql.password_hash = salt,sha256
## salt 后缀:使用 sha256 加密 密码 + salt 拼接的字符串
auth.mysql.password_hash = sha256,salt
## pbkdf2 with macfun iterations dklen
## macfun: md4, md5, ripemd160, sha, sha224, sha256, sha384, sha512
## auth.mysql.password_hash = pbkdf2,sha256,1000,20
Cómo generar información de autenticación
-
Para cada cliente, divida el nombre de usuario, la ID del cliente, la contraseña y la sal (salt) y otra información.
-
Utilice las mismas reglas de salazón y métodos de hash que la autenticación MySQL para procesar la información del cliente y obtener texto cifrado.
-
Escriba la información del cliente en la base de datos y la contraseña del cliente debe ser información de texto cifrado.