1、EMQX配置的HTTP认证,发到一个服务器内部的一个HTTP接口
2、HTTP接口会判断用户名和密码是否符合要求,用户名是一个mac地址,密码是会30分钟过期的jwt的token。
3、首先接口会先判断当前mac地址的设备是否外网在线,如果不在线,我这边想返回服务不可用
对应mqtt3协议的0x03。如果是密码校验不通过,比如jwt过期,我想返回mqtt3协议的0x05
4、但是我这边按照ASK AI的处理方式,返回了503以及result为ignore,但客户端用户名(mac)在线状态连接认证不通过还是返回0x05,请问能否做个区分,方便MQTT客户端根据认证返回结果进行判断
目前没有提供这种支持,HTTP 认证接口返回的 result 字段的值只能是: allow
、deny
、ignore
三者之一。
如果是 deny
,那么 MQTT CONNACK 的值总会是:NOT_AUTHORIZED(0x87 for MQTT 5.0) 或者 CONNACK_AUTH(0x05 for MQTT 3.1.1 and before)。
我去提一下功能改进建议,看能不能扩展一下 HTTP 认证的返回值,让 HTTP 服务端能够控制 CONNACK 的 reason code。
这个不能返回 0x03 之类的 code,不符合 MQTT 规范要求。根据 MQTT 规范,0x03 表示的含义是 MQTT 服务不可用:The Network Connection has been made but the MQTT service is unavailable.
那0x04呢,http认证校验的是用户名和密码,但是认证失败都返回0x05,为啥不能返回0x04