AUTH报文被从客户端发送给服务端,或从服务端发送给客户端,作为扩展认证交换的一部分,比如质询/响应认证。如果CONNECT报文不包含相同的认证方法,则客户端或服务端发送AUTH报文将造成协议错误(Protocol Error)。
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
byte 1 | MQTT控制报文类型 (15) | 保留位 | ||||||
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | |
byte 2 | 剩余长度 |
AUTH报文固定报头第3,2,1,0位是保留位,必须全设置为0。客户端或服务端必须把其他值当做无效值并关闭网络连接 [MQTT-3.15.1-1]。
剩余长度字段
等于可变报头的长度,编码为变长字节整数。
AUTH报文可变报头按顺序包含以下字段:认证原因码(Authentication Reason Code),属性(Properties)。属性的编码规则,如2.2.2节所述。
可变报头第0字节是认证原因码(Authenticate Reason Code)。单字节无符号认证原因码字段的值如下所示。AUTH报文的发送端必须使用一种认证原因码 [MQTT-3.15.2-1]。
表 3-11 – 认证原因码 Authenticate Reason Codes
值 | 16进制 | 原因码名称 | 发送端 | 说明 |
---|---|---|---|---|
0 | 0x00 | 成功 | 服务端 | 认证成功。 |
24 | 0x18 | 继续认证 | 客户端或服务端 | 继续下一步认证。 |
25 | 0x19 | 重新认证 | 客户端 | 开始重新认证。 |
如果原因码为0x00(成功)并且没有属性字段,则可以省略原因码和属性长度。这种情况下,AUTH报文剩余长度为0。
AUTH报文可变报头中的属性的长度被编码为变长字节整数。
*21 (0x15) ,认证方法(Authentication Method)标识符。
跟随其后的是一个UTF-8编码字符串,包含认证方法名称。省略认证方法或者包含多个认证方法都将造成协议错误(Protocol Error)。更多关于扩展认证的信息,参考4.12节。
22 (0x16) ,认证数据(Authentication Data)标识符。
跟随其后的是二进制数据,包含认证数据。包含多个认证数据将造成协议错误(Protocol Error)。此数据的内容由认证方法定义。更多关于扩展认证的信息,参考4.12节。
31 (0x1F) ,原因字符串(Reason String)标识符。
跟随其后的是UTF-8编码字符串,表示断开原因。此原因字符串是为诊断而设计的可读字符串,不应该被接收端所解析。
如果加上原因字符串之后的AUTH报文长度超出了接收端所指定的最大报文长度,则发送端不能发送此属性 [MQTT-3.15.2-2]。包含多个原因字符串将造成协议错误(Protocol Error)。
38 (0x26) ,用户属性(User Property)标识符。
跟随其后的是UTF-8字符串对。此属性可用于向客户端提供包括诊断信息在内的附加信息。如果加上用户属性之后的AUTH报文长度超出了接收端指定的最大报文长度,则服务端不能发送此属性 [MQTT-3.15.2-3]。用户属性(User Property)允许出现多次,以表示多个名字/值对,且相同的名字可以多次出现。
AUTH报文没有有效载荷。
更多关于扩展认证的信息,参考4.12节。
- 3.0 Contents – MQTT控制报文
- 3.1 CONNECT – 连接服务端
- 3.2 CONNACK – 确认连接请求
- 3.3 PUBLISH – 发布消息
- 3.4 PUBACK –发布确认
- 3.5 PUBREC – 发布收到(QoS 2,第一步)
- 3.6 PUBREL – 发布释放(QoS 2,第二步)
- 3.7 PUBCOMP – 发布完成(QoS 2,第三步)
- 3.8 SUBSCRIBE - 订阅主题
- 3.9 SUBACK – 订阅确认
- 3.10 UNSUBSCRIBE –取消订阅
- 3.11 UNSUBACK – 取消订阅确认
- 3.12 PINGREQ – 心跳请求
- 3.13 PINGRESP – 心跳响应
- 3.14 DISCONNECT –断开连接
- 3.15 AUTH – 认证交换