2-8 MQTT用户密码认证

在之前的课程里我曾给大家讲解了MQTT客户端连接服务端的基本过程。客户端通过CONNECT报文,向服务端发起连接请求。CONNECT报文所包含的具体信息内容如下:

MQTT CONNECT报文用户认证部分
MQTT CONNECT报文用户认证

到目前为止,我们已经将CONNECT报文中的信息大部分讲解完毕了,目前只剩下上图中红色方框所标注的username(用户名)和password(密码)。这里的用户名和密码是用于客户端连接服务端时进行认证需要的。

有些MQTT服务端需要客户端在连接时提供用户名和密码。只有客户端正确提供了用户名和密码后,才能连接服务端。否则服务端将会拒绝客户端连接,那么客户端也就无法发布和订阅消息了。

请注意,username(用户名)和password(密码)是可选的CONNECT信息。也就是说,有些服务端开启了客户端用户密码认证,这种服务端需要客户端在连接时正确提供认证信息才能连接。当然,那些没有开启用户密码认证的服务端无需客户端提供用户名和密码认证信息。

在以上示例中,我们看到此CONNECT报文中所包含的用户名是“hans”,密码是“letmein”。

用户名和密码除了有以上功能外,有些公用MQTT服务端也利用此信息来识别客户端属于哪一个用户,从而对客户端进行管理。比如用户可以拥有私人主题,这些主题只有该用户可以发布和订阅。对于私人主题,服务端就可以利用客户端连接时的用户名和密码来判断该客户端是否有发布订阅该用户私人主题的权限。


ESP8266 MQTT用户密码认证

以下示例程序实现了ESP8266连接MQTT服务端时的用户名和密码认证。

程序中的78行调用connect函数时,提供了MQTT服务端连接的用户名和密码信息。这些信息是在程序的26-28定义的。

关于本程序的详细介绍,请看本文首部的讲解。