Skip to content

Latest commit

 

History

History
75 lines (53 loc) · 2.88 KB

认证.md

File metadata and controls

75 lines (53 loc) · 2.88 KB

认证

一.简介

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

MQTT 协议本身在 CONNECT 报文中指定用户名和密码,EMQ X Broker 以插件形式支持基于 Username、ClientID、HTTP、JWT、LDAP 及各类数据库如 MongoDB、MySQL、PostgreSQL、Redis 等多种形式的认证。

在传输层上,TLS 可以保证使用客户端证书的客户端到服务器的身份验证,并确保服务器向客户端验证服务器证书。也支持基于 PSK 的 TLS/DTLS 认证。

二.username认证

Username 认证使用配置文件预设客户端用户名与密码,支持通过 HTTP API 管理认证数据。
插件:emqx_auth_username


可以通过配置文件预设认证数据,编辑配置文件:etc/plugins/emqx_auth_username.conf

# etc/plugins/emqx_auth_username.conf

## 第一组认证数据
auth.user.1.username = admin
auth.user.1.password = public

## 第二组认证数据
auth.user.2.username = wivwiv
auth.user.2.password = public
插件启动时将读取预设认证数据并加载到 EMQ X Broker 内置数据库中,节点上的认证数据会在此阶段同步至集群中

二.Client ID 认证

与用户名密码认证类似:编辑配置文件:etc/plugins/emqx_auth_clientid.conf

三.HTTP 认证

进行身份认证时,EMQ X Broker 将使用当前客户端信息填充并发起用户配置的认证查询请求,查询出该客户端在 HTTP 服务器端的认证数据。
## 请求地址
auth.http.auth_req = http://127.0.0.1:8991/mqtt/auth

## HTTP 请求方法
## Value: post | get | put
auth.http.auth_req.method = post

## 请求参数
auth.http.auth_req.params = clientid=%c,username=%u,password=%P

%u:用户名
%c:Client ID
%a:客户端 IP 地址
%r:客户端接入协议
%P:明文密码
%p:客户端端口
%C:TLS 证书公用名(证书的域名或子域名),仅当 TLS 连接时有效
%d:TLS 证书 subject,仅当 TLS 连接时有效

四.JWT认证

JWT 认证基于 Token 的鉴权机制,不依赖服务端保留客户端的认证信息或者会话信息,在持有密钥的情况下可以批量签发认证信息,是最简便的认证方式。

插件:
emqx_auth_jwt

五.MYSQL认证

MySQL 认证使用外部 MySQL 数据库作为认证数据源,可以存储大量数据,同时方便与外部设备管理系统集成。
emqx_auth_mysql

MySQL 基础连接信息,需要保证集群内所有节点均能访问。

# etc/plugins/emqx_auth_mysql.conf

## 服务器地址
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