认证
EMQX Dashboard 提供了开箱即用的认证与权限管理功能,用户仅通过用户界面,就可以快速实现客户端认证授权机制的配置,无需编写代码或手动编辑配置文件,即可对接各类数据源与认证服务,实现各个级别与各类场景下的安全配置,以更高的开发效率获得更安全的保障。
在左侧的访问控制菜单下,用户可以进入到认证页面,认证页面中用户可以快速创建和管理创建好的各类认证资源。
TIP
配置好认证资源后,设备或 MQTT 客户端需要配置对应的认证信息,才可以安全连接到 EMQX。
创建认证
在认证页面下的右上角,点击 创建
按钮,即可进入到创建认证的页面。创建一个认证需要选择一种认证方式,选择完成后需要选择一个存储或获取认证信息的数据源(JWT 认证方式除外),认证数据可以从这些数据源包括数据库或 HTTP 服务中获取,最后再配置连接到该数据源的连接信息即可。
认证方式
目前 EMQX 提供了三种认证方式,包含有:
- Password-Based,使用客户端 ID 或用户名加密码的认证方式;
- JWT,客户端可以在用户名或密码字段中携带 JWT token 来进行认证;
- SCRAM,MQTT 5.0 中的增强认证,可以实现对客户端和服务器的双向认证。
![image](/assets/create-authn.xzKThEzX.png)
数据源
Password-Based
当选择 Password-Based
的认证方式后,用户可以选择存储认证数据的数据库或提供认证数据功能的 HTTP 服务器,数据库包含两类:
- EMQX 的内置数据库,即选择
Built-in Database
; - 外部数据库,支持选择并连接到一些主流数据库,包括:
MySQL
、PostgreSQL
、MongoDB
、Redis
等。
除数据库外,还可以直接使用能够提供认证数据的 HTTP 服务,即选择 HTTP Server
。
![image](/assets/authn-data-source.RdYSIpyN.png)
JWT
如果选择了 JWT 的认证方式,将无需选择数据源。
SCRAM
MQTT 5.0 中的增强认证功能,如果选择了该认证方式的话,目前仅提供了使用 Built-in Database
数据源,即使用 EMQX 的内置数据库来存储和获取认证数据。
增强认证包含质询/响应风格的认证,可以实现对客户端和服务器的双向认证,服务器可以验证连接的客户端是否是真正的客户端,客户端也可以验证连接的服务器是否是真正的服务器,从而提供了更高的安全性。
更多关于 MQTT 5.0 增强认证的介绍与使用方式,请访问 SCRAM 认证。
配置参数
选择完数据源后,我们就来到了创建认证的最后一步,配置选择好的数据源,每一个数据源都有一些连接或使用时的配置信息需要用户手动配置。
内置数据库
例如使用内置数据库的话需要选择使用用户名还是客户端 ID,选择密码的加密方式等;如果是选择了 MQTT 5.0 的增强认证,使用内置数据库的话,只需要配置加密方式即可。
![image](/assets/authn-built-db-config.wexAavFv.png)
更多关于内置数据库的配置详情,请访问 使用内置数据库(Mnesia)的密码认证。
外部数据库
选择外部数据库的话,需要配置能访问到的数据库地址,数据库名称,用户名密码,以及认证相关配置,填写如何从数据库中获取数据的 SQL 语句或其它查询语句等。以 MySQL 为例:
![image](/assets/authn-mysql-config.kS49znor.png)
更多关于 MySQL 或其它外部数据库的配置详情,请访问 使用 MySQL 的密码认证 或查看使用其它数据库。
HTTP Server
选择使用 HTTP 服务的话,需要配置请求该 HTTP 服务的请求方式,POST 或 GET 方法。请求地址 URL,注意 URL 内需要填写协议是 http 或 https,如果有端口号的话需要在 URL 中携带端口号。然后是 HTTP 请求的 Headers 配置,携带认证信息的内容需要和请求 HTTP 服务的数据格式相同,然后配置到 Body
字段中,例如将 username
和 password
填写到 JSON 数据中。
![image](/assets/authn-http-config.iyEUD3zl.png)
更多关于 HTTP Server 的配置详情,请访问 使用 HTTP 的密码认证。
JWT & JWKS
如果选择使用 JWT 的认证方式,则无需选择数据源,可直接配置 JWT 的相关信息。设置 JWT 所需要的 Token 来源于客户端的 username
还是 password
字段。这样客户端连接时只需要将 Token 填充到对应的字段上,即可进行 JWT 认证。然后选择 JWT 的加密方式,根据加密方式不同来设置 Secret
或 Public Key
,是否设置 Secret
为 Base64 编码,最后输入需要校验获取的信息在 Payload
中,就可以完成对 JWT 认证的配置。
选择 JWKS 可以从 JWKS Endpoint
上定期获取最新的 JWKS,JWKS 本质上就是一组公钥,它们将被用于验证授权服务器颁发并使用 RSA 或者 ECDSA 算法签名的任何 JWT,并配置 JWKS 的刷新间隔时间(单位为秒)。最后再配置 Payload
项即可完成 JWKS 的配置。
![image](/assets/authn-jwt-config.u9E5sziC.png)
更多关于 JWT 的配置详情,请访问 JWT 认证。
完成配置后,点击创建即可快速完成认证配置。注意:无法再次选择正在使用的认证数据源。
认证列表
创建认证器成功后,可以在认证列表中查看和管理。列表中我们可以查看到认证器的数据源及认证方式,数据源状态,比如外部数据库没有正常部署成功和连接到的话,可看到目前数据源状态为已断开。鼠标悬浮到该字段的话,可以查看更多 EMQX 集群内所有节点连接到该数据源的状态。点击是否启用开关,可以快速开启和关闭该认证配置。
认证列表的每一栏都可以通过鼠标来拖动调整顺序,或通过操作栏调整列表顺序,顺序对于认证列表来说有一定的重要性,因为 EMQX 允许创建多个认证器,这些认证器将按照在认证链中的位置顺序运行,如果在当前认证器中未检索到匹配的认证信息,将会切换至链上的下一个认证器继续认证过程。
在操作栏中还可以点击设置或删除认证器等。
![image](/assets/authn-list._vNC4eH6.png)
TIP
关闭认证器后,EMQX Broker 将不再对客户端进行认证,所有客户端都可以连接到 EMQX Broker。请谨慎操作。
用户管理
对于使用内置数据库的用户来说,在认证列表页点击 用户管理
,可以来到用户管理页面,在该页面,可以管理认证信息,例如添加或删除用户名和密码,也可以通过下载模版,在模版内填充好相关的认证信息,点击 导入
来批量创建认证相关的用户信息。
![image](/assets/authn-users.0r327tNr.png)
认证概览
点击列表页中的数据源及认证方式,可以进入到认证器的概览页面。该页面提供了 EMQX 集群中认证器的一些数据指标,例如认证的成功和失败数,不匹配数和当前正在连接认证的速率等。
页面最下方的节点状态,可以从列表中查看每个节点下的指标数据。
![image](/assets/authn-overview.WF7EMuVZ.png)
认证设置
当需要修改认证配置时,可以点击列表页中的 设置
,在设置页面可以修改当前认证器的配置信息,如当外部数据库的一些连接信息发生变化时,需要修改内置数据库的账号类型是用户名还是客户端 ID 的时候,或修改认证密码的加密方式等。
TIP
当使用内置数据库时,更新密码「加密方式」或「加盐方式」将导致已添加的认证数据不可用,请谨慎操作。
![image](/assets/authn-settings.yskZ4t0B.png)
更多关于认证的详细解释与使用,请访问安全认证。