物联网之MQTT3.1.1和MQTT5协议 (16) AUTH 报文

前言

AUTH报文是MQTT5的新报文,MQTT3版本则没有。

AUTH – 认证交换(MQTT 5)

AUTH报文被从客户端发送给服务端,或从服务端发送给客户端,作为扩展认证交换的一部分,比如挑战/响应认证。如果CONNECT报文不包含相同的认证方法,则客户端或服务端发送AUTH报文将造成协议错误(Protocol Error)。

挑战/响应认证

(1) 先由客户端向服务器发出一个验证请求。
(2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)。
(3) 客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。
(4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户。

固定报头

在这里插入图片描述

AUTH报文固定报头第3,2,1,0位是保留位,必须全设置为0。客户端或服务端必须把其他值当做无效值并关闭网络连接。

剩余长度字段
等于可变报头的长度,编码为变长字节整数。

可变报头

AUTH报文可变报头按顺序包含以下字段:认证原因码(Authentication Reason Code),属性(Properties)。

认证原因码

在这里插入图片描述

如果原因码为0x00(成功)并且没有属性字段,则可以省略原因码和属性长度。这种情况下,AUTH报文剩余长度为0。

AUTH属性

属性长度

UTH报文可变报头中的属性的长度被编码为变长字节整数。

认证方法

21 (0x15)Byte,认证方法(Authentication Method)标识符。

跟随其后的是一个UTF-8编码字符串,包含认证方法名称。省略认证方法或者包含多个认证方法都将造成协议错误(Protocol Error)。

认证数据

22 (0x16)Byte,认证数据(Authentication Data)标识符。
跟随其后的是二进制数据,包含认证数据。包含多个认证数据将造成协议错误(Protocol Error)。此数据的内容由认证方法定义。

原因字符串

31 (0x1F)Byte,原因字符串(Reason String)标识符。
跟随其后的是UTF-8编码字符串,表示断开原因。此原因字符串是为诊断而设计的可读字符串,不应该被接收端所解析。

如果加上原因字符串之后的AUTH报文长度超出了接收端所指定的最大报文长度,则发送端不能发送此属性。包含多个原因字符串将造成协议错误(Protocol Error)。

用户属性

38 (0x26)Byte,用户属性(User Property)标识符。 跟随其后的是UTF-8字符串键值对。此属性可用于向客户端提供包括诊断信息在内的附加信息。如果加上用户属性之后的AUTH报文长度超出了接收端指定的最大报文长度,则服务端不能发送此属性。用户属性(User Property)允许出现多次,以表示多个名字/值对,且相同的名字可以多次出现。

AUTH载荷

AUTH报文没有有效载荷

AUTH行为

在之后的博文关于“操作行为”的内容会提到

发布了189 篇原创文章 · 获赞 675 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/YuYunTan/article/details/102519428