物联网之MQTT3.1.1和MQTT5协议 (16) AUTH 报文
Posted YuYunTan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物联网之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行为
在之后的博文关于“操作行为”的内容会提到
以上是关于物联网之MQTT3.1.1和MQTT5协议 (16) AUTH 报文的主要内容,如果未能解决你的问题,请参考以下文章
物联网之MQTT3.1.1和MQTT5协议 (15) DISCONNECT报文
物联网之MQTT3.1.1和MQTT5协议 (12) UNSUBACK 报文
物联网之MQTT3.1.1和MQTT5协议 (21) MQTT系列博文总览