在我们选用开源的EMQX作为mqtt broker,我们可能会考虑先让客户端连接mqtt broker成功,再去校验客户端的有效性,当该客户端认证失败,再将其踢下线。例如:物联网设备连接云平台时,我们会将PK、PS提前烧录到设备中,用于连接mqtt broker的连接,而把DK、DS 放入payload中,当检测DK、DS不合法时,就会将该设备踢下线。本文简单介绍了,服务端(mqtt客户端)如何客户端(其它客户端)踢下线。
EMQX REST API swagger文档
http://localhost:18083/api-docs/index.html
两个接口可以将客户端踢下线
1. 批量踢下线接口
/api/v5/clients/kickout/bulk
2. 单个踢下线接口
/api/v5/clients/{clientId}
过程演示
1. 创建API秘钥
在侧边栏找到API秘钥菜单,点击该菜单,进入到API 密钥管理页面,点击创建按钮,输入秘钥名称,点击确定,即成功创建了API秘钥,复制Api Key和Secret Key,自己保存下来(只有第一次可见)。
2. 客户端连接
如下图,客户端上线
3. 调用接口将客户端踢下线(/api/v5/clients/{clientId})
注意:响应码204,表示踢下线成功
如下图,调用接口后已将该客户端踢下线:
4. 接口的令牌是如何生成?
本文的Api秘钥数据如下所示:
ApiKey:a972505196446799
SecretKey:mn9AhnqtVDpSoloAJ29CThsl9AimB5TYpBJrxoZ9AsT8atH
${ApiKey}:${SecretKey} Base64编码后,在开头补充Basic + 一个空格
Authorization: Basic YTk3MjUwNTE5NjQ0Njc5OTptbjlBaG5xdFZEcFNvbG9BSjI5Q1Roc2w5QWltQjVUWXBCSnJ4b1o5QXNUOGF0SA==
EMQX文档:https://docs.emqx.com/en/emqx/v5.0/admin/api.html#java