当我们基于EMQX 搭建企业自主的 IoT 物联网平台后,身份认证是首要配置的模块,启用身份认证能有效阻止非法客户端的连接。在MQTT 协议中,我们使用用户名/密码来做设备端身份的认证。

EMQ X 中的设备身份认证指的是当一个客户端连接到 EMQ X 的时候,通过服务器端的配置来控制客户端连接服务器的权限。

EMQX 身份认证

EMQ X 的认证支持包括两个层面:

EMQX 支持的认证方式:

EMQX 身份认证流程

我们以项目中最常用的 MySQL 认证为例,认证逻辑图如下:

  1. 根据配置的认证 SQL 结合客户端传入的username,查询出密文;查询无果时,认证将终止并返回 ignore

  2. 根据配置的哈希方法计算得到密文

  3. 将 MySQL 数据库中存储的密文与当前客户端参数计算出的密文进行比对,两者相同则认证通过,否则认证失败

启用 MySQL 认证

在EMQX启用 MySQL 认证,我们需要在 etc/plugins/emqx_auth_mysql.conf  中配置 MySQL 服务相关的连接地址,用户名/密码,数据库实例,password的哈希方法,如下:

## 服务器地址
auth.mysql.server = 127.0.0.1:3306
## 连接池大小
auth.mysql.pool = 8
auth.mysql.username = emqx
auth.mysql.password = public
auth.mysql.database = mqtt
auth.mysql.query_timeout = 5s
## 使用 sha256 加密
auth.mysql.password_hash = sha256

MySQL 认证默认配置下需要确保数据库中有下表:

CREATE TABLE `mqtt_user` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`username` varchar(100) DEFAULT NULL,`password` varchar(100) DEFAULT NULL,`salt` varchar(35) DEFAULT NULL,`is_superuser` tinyint(1) DEFAULT 0,`created` datetime DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `mqtt_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

默认配置如下示例数据:

INSERT INTO `mqtt_user` ( `username`, `password`)
VALUES('emqx', 'efa1f375d76194fa51a3556a97e641e61685f914d446979da50a551a4333ffd7');

启用 MySQL 认证后,你可以通过用户名:emqx,密码:public 连接。

启用 MySQL 认证

当设备端发起MQTT协议的CONNECT请求时,EMQX 将使用当前设备端信息填充并执行用户配置的认证 SQL,查询出该客户端在数据库中的认证数据。

# etc/plugins/emqx_auth_mysql.conf
auth.mysql.auth_query = select password from mqtt_user where username = '%u' limit 1

我们可以在认证 SQL 中使用以下占位符,执行时 EMQX 将自动填充为客户端信息:

%u:用户名
%c:Client ID
%C:TLS 证书的域名或子域名,仅当 TLS 连接时有效
%d:TLS 证书 subject,仅当 TLS 连接时有效

我们可以根据业务需要调整认证 SQL,如添加多个查询条件、使用数据库预处理函数,以实现更多业务相关的功能。但是任何情况下认证 SQL 需要满足以下条件:

  1. 查询结果中必须包含 password 字段,EMQX 使用该字段与客户端密码比对

  2. 如果启用了加盐配置,查询结果中必须包含 salt 字段,EMQX 使用该字段作为 salt(盐)值

  3. 查询结果只能有一条,多条结果时只取第一条作为有效数据

默认表结构中,我们将 username 字段设为了唯一索引(UNIQUE),与默认的查询语句 select password from mqtt_user where username = '%u' limit 1  配合使用,从而获得非常不错的查询性能。


最后,赠送16元优惠券,加入国内最大IoT物联网开发者社区,获取1000+行业资料

往期推荐

☞ 中国云计算第一股关停 IoT云服务

☞ 2022年IoT平台趋势:私有化部署

☞ 国内MCU行业发展研究报告

☞ 2021年4G通信模组企业排行

☞ 艾瑞 2021中国 IoT物联网平台研究

☞ 云厂商的[IoT物联网平台]不香了吗?

EMQ自建 IoT 物联网平台 - 设备身份认证相关推荐

  1. Android设备接入阿里云IoT物联网平台——设备接入类

    1. 准备工作 1.1 注册阿里云账号 使用个人淘宝账号或手机号,开通阿里云账号,并通过__实名认证(可以用支付宝认证)__ 1.2 免费开通IoT物联网套件 产品官网 ​​https://www.a ...

  2. 2022年 IoT 物联网平台发展趋势:私有化部署

    据麦肯锡<物联网:抓住加速机遇>报告预测,到2030年,物联网将在全球创造最高可达12.6万亿美元的经济价值.随着亚马逊.阿里云等云计算巨头不断加码投入,公有云IoT物联网平台因其低成本. ...

  3. IoT物联网平台如何实现设备全球分发、就近接入?

    近年来,物联网技术正以指数级的速度日渐成熟,并潜移默化的改变着人们的生活.根据国际数据公司IDC的预测估计,到2025年,将有416亿台联网的IoT设备或"物",生成79.4 ZB ...

  4. 基于TCP协议的GPS定位器设备迁移到阿里云IoT物联网平台实践——实践类

    背景 GPS定位器是内置了GPS模块和移动通信模块的终端,用来将GPS模块获得的定位数据通过移动通信模块传至Internet上的一台服务器上,从而可以实现在电脑或手机上查询终端位置. GPS定位器可用 ...

  5. 揭秘 | 阿里云IoT物联网平台亿级设备接入方案大揭秘

    一.前言 不同的接入层 互联网的产品基本都需要解决终端的接入问题,每个接入层会因为终端数量.终端能力.网络环境等不同的因素有各自的设计特性,比如:淘宝网需要解决海量短连接问题.微信需要解决海量长连接问 ...

  6. 【小程序案例】支付宝小程序-MQTT模器,IoT设备通过WSS接入阿里云IoT物联网平台...

    支付宝小程序-MQTT模拟器通过WSS接入阿里云IoT物联网平台 准备工作 1.1 注册阿里云账号 开通阿里云账号,并通过支付宝实名认证 https://www.aliyun.com 1.2 免费开通 ...

  7. 大型 IoT 物联网平台如何保障亿级设备安全连接上云?

    01. 华为云 IoTDA业务流 华为云IoT设备接入云服务(简称"IoTDA")提供海量设备的接入和管理能力,可以将IoT设备联接到华为云,支撑设备数据采集上云和云端下发命令给设 ...

  8. IoT物联网平台「设备影子」开发实战

    IoT物联网平台提供设备影子功能,在云端通过一个JSON文件持久化存储设备上报状态值和业务系统的期望值.每个设备有且只有一个设备影子,设备可以通过MQTT协议获取期望值desired和设置设备状态re ...

  9. IoT物联网平台如何实现大规模设备的高效控制?

    一.设备管理 在IoT领域核心的场景之一就是云和设备交互.如图1是一个典型的业务场景 设备上报数据到阿里云物联网(IoT)平台, 然后阿里云物联网(IoT)平台,将上报的数据存储到DB中, 当然设备上 ...

最新文章

  1. 独家|深度学习训练和推理之间有什么差异?
  2. java add offer_图解Java中的5大队列!(干货收藏)
  3. 微信小程序-04-详解介绍.json 配置文件
  4. python 财务报表审计_用Python来分析审计行业的这10年
  5. kotlin学习笔记——过程控制和Range表达式
  6. Cloud for Customer Restriction and Exclusion Product Lists
  7. 数据库高可用架构 转载
  8. 基于dreamweaver软件设计和开发一网站_基于 abp vNext 和 .NET Core 开发博客项目 Blazor 实战系列(一)...
  9. [React] 尚硅谷 -- 学习笔记(二)
  10. TORCHVISION MODELS
  11. tensorflow测量工具的使用
  12. 使用PyQt来编写第一个Python GUI程序
  13. 【Mac】Mac键盘实现Home, End, Page UP, Page DOWN
  14. php mongodb 管理工具,细数MongoDB管理工具
  15. matlab 扩大虚拟内存,matlab 扩大虚拟内存
  16. LayoutInflator#Inflate(...)
  17. 深度思考故事1:贴发票和贴海报
  18. 试卷代号:4988 2021年春季学期期末统一考试电子政务概论 试题(开卷)
  19. 我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
  20. 2023年,“新一代”固定资产管理平台——支持低代码平台

热门文章

  1. php查询mysql充值_PHP + MYSQL 实现 用户注册/登录/充值 功能
  2. 前端的人真的这么多吗?结果惊呆小伙伴
  3. 微信小程序-模板与配置
  4. 哨兵2a 波段组合_遥感数据介绍—Sentinel 2A
  5. 西门子S7-1200笔记
  6. Linux防火墙iptables添加白名单
  7. 微信小程序获得用户头像昵称调整(2022年9月28日修改)
  8. 二月英语主旋律——发音练习
  9. 基于Python实现的蛋白质二级结构预测
  10. 实用的60个CSS代码片段[下]