认证

EMQX Dashboard 提供了开箱即用的认证与权限管理功能,用户仅通过用户界面,就可以快速实现客户端认证授权机制的配置,无需编写代码或手动编辑配置文件,即可对接各类数据源与认证服务,实现各个级别与各类场景下的安全配置,以更高的开发效率获得更安全的保障。

在左侧的访问控制菜单下,用户可以进入到认证页面,认证页面中用户可以快速创建和管理创建好的各类认证资源。

提示

配置好认证资源后,设备或 MQTT 客户端需要配置对应的认证信息,才可以安全连接到 EMQX。

创建认证

在认证页面下的右上角,点击 创建 按钮,即可进入到创建认证的页面。创建一个认证需要选择一种认证方式,选择完成后需要选择一个存储或获取认证信息的数据源(JWT 认证方式除外),认证数据可以从这些数据源包括数据库或 HTTP 服务中获取,最后再配置连接到该数据源的连接信息即可。

认证方式

目前 EMQX 提供了三种认证方式,包含有:

  1. Password-Based,使用客户端 ID 或用户名加密码的认证方式;
  2. JWT,客户端可以在用户名或密码字段中携带 JWT token 来进行认证;
  3. SCRAM,MQTT 5.0 中的增强认证,可以实现对客户端和服务器的双向认证。

image

数据源

Password-Based

当选择 Password-Based 的认证方式后,用户可以选择存储认证数据的数据库或提供认证数据功能的 HTTP 服务器,数据库包含两类:

  • EMQX 的内置数据库,即选择 Built-in Database
  • 外部数据库,支持选择并连接到一些主流数据库,包括:MySQLPostgreSQLMongoDBRedis 等。

除数据库外,还可以直接使用能够提供认证数据的 HTTP 服务,即选择 HTTP Server

image

JWT

如果选择了 JWT 的认证方式,将无需选择数据源。

SCRAM

MQTT 5.0 中的增强认证功能,如果选择了该认证方式的话,目前仅提供了使用 Built-in Database 数据源,即使用 EMQX 的内置数据库来存储和获取认证数据。

增强认证包含质询/响应风格的认证,可以实现对客户端和服务器的双向认证,服务器可以验证连接的客户端是否是真正的客户端,客户端也可以验证连接的服务器是否是真正的服务器,从而提供了更高的安全性。

更多关于 MQTT 5.0 增强认证的介绍与使用方式,请访问 SCRAM 认证

配置参数

选择完数据源后,我们就来到了创建认证的最后一步,配置选择好的数据源,每一个数据源都有一些连接或使用时的配置信息需要用户手动配置。

内置数据库

例如使用内置数据库的话需要选择使用用户名还是客户端 ID,选择密码的加密方式等;如果是选择了 MQTT 5.0 的增强认证,使用内置数据库的话,只需要配置加密方式即可。

image

更多关于内置数据库的配置详情,请访问 使用内置数据库(Mnesia)的密码认证

外部数据库

选择外部数据库的话,需要配置能访问到的数据库地址,数据库名称,用户名密码,以及认证相关配置,填写如何从数据库中获取数据的 SQL 语句或其它查询语句等。以 MySQL 为例:

image

更多关于 MySQL 或其它外部数据库的配置详情,请访问 使用 MySQL 的密码认证 或查看使用其它数据库。

HTTP Server

选择使用 HTTP 服务的话,需要配置请求该 HTTP 服务的请求方式,POST 或 GET 方法。请求地址 URL,注意 URL 内需要填写协议是 http 或 https,如果有端口号的话需要在 URL 中携带端口号。然后是 HTTP 请求的 Headers 配置,携带认证信息的内容需要和请求 HTTP 服务的数据格式相同,然后配置到 Body 字段中,例如将 usernamepassword 填写到 JSON 数据中。

image

更多关于 HTTP Server 的配置详情,请访问 使用 HTTP 的密码认证

JWT & JWKS

选择使用 JWT 的认证方式话,无需选择数据源,可直接配置 JWT 的相关信息。设置 JWT 所需要的 Token 来源于客户端的 username 还是 password 字段。这样客户端连接时只需要将 Token 填充到对应的字段上,即可进行 JWT 认证。然后选择 JWT 的加密方式,根据加密方式不同来设置 SecretPublic Key,是否设置 Secret 为 Base64 编码,最后输入需要校验获取的信息在 Payload 中,就可以完成对 JWT 认证的配置。

选择 JWKS 可以从 JWKS Endpoint 上定期获取最新的 JWKS,JWKS 本质上就是一组公钥,它们将被用于验证授权服务器颁发并使用 RSA 或者 ECDSA 算法签名的任何 JWT,并配置 JWKS 的刷新间隔时间(单位为秒)。最后再配置 Payload 项即可完成 JWKS 的配置。

image

更多关于 JWT 的配置详情,请访问 JWT 认证

完成配置后,点击创建即可快速完成认证配置。注意:无法再次选择正在使用的认证数据源。

认证列表

创建认证器成功后,可以在认证列表中查看和管理。列表中我们可以查看到认证器的数据源及认证方式,数据源状态,比如外部数据库没有正常部署成功和连接到的话,可看到目前数据源状态为已断开。鼠标悬浮到该字段的话,可以查看更多 EMQX 集群内所有节点连接到该数据源的状态。点击是否启用开关,可以快速开启和关闭该认证配置。

认证列表的每一栏都可以通过鼠标来拖动调整顺序,或通过操作栏调整列表顺序,顺序对于认证列表来说有一定的重要性,因为 EMQX 允许创建多个认证器,这些认证器将按照在认证链中的位置顺序运行,如果在当前认证器中未检索到匹配的认证信息,将会切换至链上的下一个认证器继续认证过程。

在操作栏中还可以点击设置或删除认证器等。

image

提示

关闭认证器后,EMQX Broker 将不再对客户端进行认证,所有客户端都可以连接到 EMQX Broker。请谨慎操作。

用户管理

对于使用内置数据库的用户来说,在认证列表页点击 用户管理,可以来到用户管理页面,在该页面,可以管理认证信息,例如添加或删除用户名和密码,也可以通过下载模版,在模版内填充好相关的认证信息,点击 导入 来批量创建认证相关的用户信息。

image

认证概览

点击列表页中的数据源及认证方式,可以进入到认证器的概览页面。该页面提供了 EMQX 集群中认证器的一些数据指标,例如认证的成功和失败数,不匹配数和当前正在连接认证的速率等。

页面最下方的节点状态,可以从列表中查看每个节点下的指标数据。

image

认证设置

当需要修改认证配置时,可以点击列表页中的 设置,在设置页面可以修改当前认证器的配置信息,如当外部数据库的一些连接信息发生变化时,需要修改内置数据库的账号类型是用户名还是客户端 ID 的时候,或修改认证密码的加密方式等。

提示

当使用内置数据库时,更新密码「加密方式」或「加盐方式」将导致已添加的认证数据不可用,请谨慎操作。

image

更多关于认证的详细解释与使用,请访问安全认证