文章目录
- 一、前言
- 二、知识储备
- 三、设置认证
- 1.开启ClientId认证
- 2.关闭匿名认证
- 3.其他认证方式
- 闲谈
一、前言
EMQX服务器默认情况是允许任意客户端接入的(只要获得服务器IP地址和端口),这也方便开发人员测试。但根据实际需求或者在生产环境中,只允许认证的终端接入,防止一些其他终端恶意接入破坏系统。
二、知识储备
身份认证是大多数应用的重要组成部分,MQTT 协议支持用户名密码认证,启用身份认证能有效阻止非法客户端的连接。
EMQ X 中的认证指的是当一个客户端连接到 EMQ X 的时候,通过服务器端的配置来控制客户端连接服务器的权限。
EMQ X 的认证支持包括两个层面:
MQTT 协议本身在 CONNECT 报文中指定用户名和密码,EMQ X 以插件形式支持基于 Username、ClientID、HTTP、JWT、LDAP 及各类数据库如 MongoDB、MySQL、PostgreSQL、Redis 等多种形式的认证。
在传输层上,TLS 可以保证使用客户端证书的客户端到服务器的身份验证,并确保服务器向客户端验证服务器证书。也支持基于 PSK 的 TLS/DTLS 认证。
说到插件,就得先了解一下钩子。
钩子(Hooks) 是 EMQ X 提供的一种机制,它通过拦截模块间的函数调用、消息传递、事件传递来修改或扩展系统功能。
简单来讲,该机制目的在于增强软件系统的扩展性、方便与其他三方系统的集成、或者改变其系统原有的默认行为。
逻辑图:
三、设置认证
1.开启ClientId认证
然后在websocket测试:
提示连接拒绝,原因是未认证。
但改了一下clientId,发现其他终端不用密码也能随意接入。为什么呢?上面的逻辑图已经有答案了,是先匿名认证再进行钩子/插件的认证。其他终端匿名认证通过了就直接放行了。
2.关闭匿名认证
打开emqx.conf
把true改成false:
然后发现其他终端还是能随意接入,重启一下看看。
成功了,一般改了核心配置文件,都要重启一下服务。
3.其他认证方式
这里只用了一种认证方式,其他的以后有机会再用吧。