EMQ X 消息服务器 连接认证 和 访问控制 由一系列的认证插件(Plugins)提供,他们的命名都符合 emqx_auth_
的规则。
在 EMQ X 中,这两个功能分别是指:
EMQ X 消息服务器认证由一系列认证插件(Plugins)提供,系统支持按用户名密码、ClientID 或匿名认证。
系统默认开启匿名认证(Anonymous),通过加载认证插件可开启的多个认证模块组成认证链:
开启匿名认证
etc/emqx.conf 配置启用匿名认证:
允许匿名访问 ## Value: true | false allow_anonymous = true
EMQ X 消息服务器通过 ACL(Access Control List) 实现 MQTT 客户端访问控制。
ACL 访问控制规则定义:
允许(Allow)|拒绝(Deny) 谁(Who) 订阅(Subscribe)|发布(Publish) 主题列表(Topics)
MQTT 客户端发起订阅/发布请求时,EMQ X 消息服务器的访问控制模块会逐条匹配 ACL 规则,直到匹配成功为止:
默认访问控制设置
EMQ X 消息服务器默认访问控制,在 etc/emqx.conf 中设置:
## 设置所有 ACL 规则都不能匹配时是否允许访问 ## Value: allow | deny acl_nomatch = allow ## 设置存储 ACL 规则的默认文件 ## Value: File Name acl_file = etc/acl.conf
ACL 规则定义在 etc/acl.conf,EMQ X 启动时加载到内存:
%% 允许 'dashboard' 用户订阅 '$SYS/#' {allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}. %% 允许本机用户发布订阅全部主题 {allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}. %% 拒绝除本机用户以外的其他用户订阅 '$SYS/#' 与 '#' 主题 {deny, all, subscribe, ["$SYS/#", {eq, "#"}]}. %% 允许上述规则以外的任何情形 {allow, all}.
EMQ X 提供的认证插件包括:
插件 | 说明 |
---|---|
emqx_auth_clientid | ClientId 认证/鉴权插件 |
emqx_auth_username | 用户名密码认证/鉴权插件 |
emqx_auth_jwt | JWT 认证/鉴权插件 |
emqx_auth_ldap | LDAP 认证/鉴权插件 |
emqx_auth_http | HTTP 认证/鉴权插件 |
emqx_auth_mysql | MySQ L认证/鉴权插件 |
emqx_auth_pgsql | Postgre 认证/鉴权插件 |
emqx_auth_redis | Redis 认证/鉴权插件 |
emqx_auth_mongo | MongoDB 认证/鉴权插件 |
其中,关于每个认证插件的配置及用法,可参考 扩展插件 (Plugins) 关于认证部分。
注解
auth 插件可以同时启动多个。每次检查的时候,按照优先级从高到低依次检查,同一优先级的,先启动的插件先检查。
此外 EMQ X 还支持使用 PSK (Pre-shared Key) 的方式来控制客户端的接入,但它并不是使用的上述的 连接认证 链的方式,而是在 SSL 握手期间进行验证。详情参考 Pre-shared Key 和 emqx_psk_file