emqtt emq 的用户密码认证

MQTT 认证设置

EMQ 消息服务器认证由一系列认证插件(Plugin)提供,系统支持按用户名密码、ClientID 或匿名认证。

系统默认开启匿名认证(anonymous),通过加载认证插件可开启的多个认证模块组成认证链:

           ----------------           ----------------           ------------
Client --> | Username认证 | -ignore-> | ClientID认证 | -ignore-> | 匿名认证 |
           ----------------           ----------------           ------------
                  |                         |                         |
                 \|/                       \|/                       \|/
            allow | deny              allow | deny              allow | deny

注解

EMQ 2.0 消息服务器还提供了 MySQL、PostgreSQL、Redis、MongoDB、HTTP、LDAP 认证插件。

开启匿名认证

etc/emq.conf 配置启用匿名认证:

## Allow Anonymous authentication
mqtt.allow_anonymous = true

EMQ 2.0 版本提供的认证插件包括:

插件 说明
emq_auth_clientid ClientId 认证/鉴权插件
emq_auth_username 用户名密码认证/鉴权插件
emq_auth_ldap LDAP 认证/鉴权插件
emq_auth_http HTTP 认证/鉴权插件
emq_auth_mysql MySQ L认证/鉴权插件
emq_auth_pgsql Postgre 认证/鉴权插件
emq_auth_redis Redis 认证/鉴权插件
emq_auth_mongo MongoDB 认证/鉴权插件

用户名密码认证

基于 MQTT 登录用户名(username)、密码(password)认证。

etc/plugins/emq_auth_username.conf 中配置默认用户:

auth.user.$N.username = admin
auth.user.$N.password = public

启用 emq_auth_username 插件:

./bin/emqttd_ctl plugins load emq_auth_username

使用 ./bin/emqttd_ctl users 命令添加用户:

$ ./bin/emqttd_ctl users add <Username> <Password>

ClientId 认证

基于 MQTT 客户端 ID 认证。

etc/plugins/emq_auth_clientid.conf:

auth.client.$N.clientid = clientid
auth.client.$N.password = passwd

启用 emq_auth_clientid 插件:

./bin/emqttd_ctl plugins load emq_auth_clientid

LDAP 插件认证

etc/plugins/emq_auth_ldap.conf 配置 LDAP 参数:

auth.ldap.servers = 127.0.0.1

auth.ldap.port = 389

auth.ldap.timeout = 30

auth.ldap.user_dn = uid=%u,ou=People,dc=example,dc=com

auth.ldap.ssl = false

启用 LDAP 认证插件:

./bin/emqttd_ctl plugins load emq_auth_ldap

HTTP 插件认证

注解

开启 HTTP 认证插件后,会终结认证链

etc/plugins/emq_auth_http.conf 配置 ‘super_req’, ‘auth_req’:

## Variables: %u = username, %c = clientid, %a = ipaddress, %P = password, %t = topic

auth.http.auth_req = http://127.0.0.1:8080/mqtt/auth
auth.http.auth_req.method = post
auth.http.auth_req.params = clientid=%c,username=%u,password=%P

auth.http.super_req = http://127.0.0.1:8080/mqtt/superuser
auth.http.super_req.method = post
auth.http.super_req.params = clientid=%c,username=%u

启用 HTTP 认证插件:

./bin/emqttd_ctl plugins load emq_auth_http

MySQL 插件认证

通过 MySQL 数据库表认证,可创建如下的 ‘mqtt_user’ 表:

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

etc/plugins/emq_auth_mysql.conf 配置 ‘super_query’, ‘auth_query’, ‘password_hash’:

## Mysql Server
auth.mysql.server = 127.0.0.1:3306

## Mysql Pool Size
auth.mysql.pool = 8

## Mysql Username
## auth.mysql.username =

## Mysql Password
## auth.mysql.password =

## Mysql Database
auth.mysql.database = mqtt

## Variables: %u = username, %c = clientid

## Authentication Query: select password only
auth.mysql.auth_query = select password from mqtt_user where username = ‘%u‘ limit 1

## Password hash: plain, md5, sha, sha256, pbkdf2
auth.mysql.password_hash = sha256

## %% Superuser Query
auth.mysql.super_query = select is_superuser from mqtt_user where username = ‘%u‘ limit 1

注解

如果系统已有MQTT认证表,可通过配置’auth_query’查询语句集成。

启用 MySQL 认证插件:

./bin/emqttd_ctl plugins load emq_auth_mysql

Postgre 插件认证

通过 PostgreSQL 数据库表认证,可创建如下的 ‘mqtt_user’ 表:

CREATE TABLE mqtt_user (
  id SERIAL primary key,
  is_superuser boolean,
  username character varying(100),
  password character varying(100),
  salt character varying(40)
);

etc/plugins/emq_auth_pgsql.conf 配置 ‘auth_query’、’password_hash’:

## Postgre Server
auth.pgsql.server = 127.0.0.1:5432

auth.pgsql.pool = 8

auth.pgsql.username = root

#auth.pgsql.password =

auth.pgsql.database = mqtt

auth.pgsql.encoding = utf8

auth.pgsql.ssl = false

## Variables: %u = username, %c = clientid, %a = ipaddress

## Authentication Query: select password only
auth.pgsql.auth_query = select password from mqtt_user where username = ‘%u‘ limit 1

## Password hash: plain, md5, sha, sha256, pbkdf2
auth.pgsql.password_hash = sha256

## sha256 with salt prefix
## auth.pgsql.password_hash = salt sha256

## sha256 with salt suffix
## auth.pgsql.password_hash = sha256 salt

## Superuser Query
auth.pgsql.super_query = select is_superuser from mqtt_user where username = ‘%u‘ limit 1

启用 Postgre 认证插件:

./bin/emqttd_ctl plugins load emq_auth_pgsql

Redis 插件认证

Redis 认证。MQTT 用户记录存储在 Redis Hash, 键值: “mqtt_user:<Username>”

etc/plugins/emq_auth_redis.conf 设置 ‘super_cmd’、’auth_cmd’、’password_hash’:

## Redis Server
auth.redis.server = 127.0.0.1:6379

## Redis Pool Size
auth.redis.pool = 8

## Redis Database
auth.redis.database = 0

## Redis Password
## auth.redis.password =

## Variables: %u = username, %c = clientid

## Authentication Query Command
auth.redis.auth_cmd = HGET mqtt_user:%u password

## Password hash: plain, md5, sha, sha256, pbkdf2
auth.redis.password_hash = sha256

## Superuser Query Command
auth.redis.super_cmd = HGET mqtt_user:%u is_superuser

启用 Redis 认证插件:

./bin/emqttd_ctl plugins load emq_auth_redis

MongoDB 插件认证

按 MongoDB 用户集合认证,例如创建 ‘mqtt_user’ 集合:

{
    username: "user",
    password: "password hash",
    is_superuser: boolean (true, false),
    created: "datetime"
}

etc/plugins/emq_auth_mongo.conf 设置 ‘super_query’、’auth_query’:

## Mongo Server
auth.mongo.server = 127.0.0.1:27017

## Mongo Pool Size
auth.mongo.pool = 8

## Mongo User
## auth.mongo.user =

## Mongo Password
## auth.mongo.password =

## Mongo Database
auth.mongo.database = mqtt

## auth_query
auth.mongo.auth_query.collection = mqtt_user

auth.mongo.auth_query.password_field = password

auth.mongo.auth_query.password_hash = sha256

auth.mongo.auth_query.selector = username=%u

## super_query
auth.mongo.super_query.collection = mqtt_user

auth.mongo.super_query.super_field = is_superuser

auth.mongo.super_query.selector = username=%u

启用 MongoDB 认证插件:

./bin/emqttd_ctl plugins load emq_auth_mongo

原文地址:https://www.cnblogs.com/sttchengfei/p/12028479.html

时间: 2024-10-07 02:16:16

emqtt emq 的用户密码认证的相关文章

OPENVPN开启用户密码认证

一.服务端配置 1.修改openvpn的主配置文件,添加如下内容 [[email protected] openvpn]# cat /etc/openvpn/server.conf |more #########auth password######## script-security 3                  ###--加入脚本处理,如用密码验证 auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env     ###指定只用的认

Emq 限制匿名用户访问,开启用户密码认证

问题: 刚搭建的emq服务默认是开启匿名用户访问的,这样的环境非常不安全,只要知道ip地址就可以连接,所以强烈建议开启用户认证,设置密码! 解决过程 1.修改配置文件 vim /etc/emqx/emqx.conf修改true为falseallow_anonymous = false 2.重启服务 systemctl stop emqxsystemctl start emqx 3.导入插件模块 cd /usr/lib/emqx/binsh emqx_ctl plugins load emqx_a

python装饰器实现用户密码认证(简单初形)

import timecurrent_user={'user':None}def auth(engine = 'file'): def deco(func): #func=最初始的index和最初始的home def wrapper(*args,**kwargs): if current_user['user']: #如果成立说明current_user里面已经有用户信息,说明用户已经登录过,满足条件 #即会执行调用index home函数 res = func(*args, **kwargs)

CentOS 6.6 x64搭建基于用户密码认证的openvpn

一.部署 部署情况请查看我上一篇文章,我们这里只是针对上一篇文章进行简单的修改 http://wangzan18.blog.51cto.com/8021085/1673778 二.修改 # vim /etc/openvpn/server.conf 在配置文件最后面添加如下几行数据 script-security 3 system auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env client-cert-not-required user

Selenium + Chrome Diver使用带用户名密码认证的HTTP代理的方法

默认情况下,Chrome的--proxy-server="http://ip:port"参数不支持设置用户名和密码认证.这样就使得"Selenium + Chrome Driver"无法使用HTTP Basic Authentication的HTTP代理.一种变通的方式就是采用IP地址认证,但在国内网络环境下,大多数用户都采用ADSL形式网络接入,IP是变化的,也无法采用IP地址绑定认证.因此迫切需要找到一种让Chrome自动实现HTTP代理用户名密码认证的方案.

openvpn 证书秘钥结合用户密码双重认证(2)客户端端设置

上接  openvpn 证书秘钥结合用户密码双重认证(1)服务器端设置 五.配置客户端-上海站点 1.安装软件 YUM可以使用互联网上的:建议使用一些邮件或者网盘的形式共享,还记得之前 VP服务器上缓存的软件包吗,当然也许两台机器环境不一样,依赖包可能不同,这根据自 己的情况定吧. $yum -y install openvpn 2.用你认为合适且安全的途径,把上海站点需要的CA证书.自己的证书和私钥等文件, 从VPN服务器那里搞过来,确保在以及目录里有这些文件. $sudo ls   /etc

Cognos权限认证CJP方式之用户密码加密

在项目开发过程中,用户往往对系统的安全都有明确的要求,下面针对cognos门户认证用户密码如何加密来提供一个简单的wf 1Cognos权限认证方式:CJP 2Cognos用户数据库类型:Oracle 3用户密码加密方式:MD5 本文主要说一下大概的实现过程: a:加密方式采用md5,可以用Java代码来写方法实现,也可以在数据库中写方法,本例子采用在DB服务端写function的方法来处理md5加密问题 (1):为了方便大家,附上md5加密方法源码 CREATE OR REPLACE FUNCT

签发token、校验token、多方式登录签发token的实现、自定义认证反爬规则的认证类、admin使用自定义User表:新增用户密码密文、群查接口各种筛选组件数据准备、drf搜索过滤组件、drf排序过滤组件、drf基础分页组件

签发token 源码入口 # 前提:给一个局部禁用了所有 认证与权限 的视图类发送用户信息得到token,其实就是登录接口 # 1)rest_framework_jwt.views.ObtainJSONWebToken 的 父类 JSONWebTokenAPIView 的 post 方法 # 接收有username.password的post请求 # 2)post方法将请求得到的数据交给 rest_framework_jwt.serializer.JSONWebTokenSerializer 处

Python 操作LDAP实现用户统一认证密码修改功能

最近做了一个单点登录系统,使用的openLDAP存储用户和组信息.封装了一个ldap的操作类.ldap这东西还是蛮复杂的,用以备忘吧.要是不知道LDAP是什么东西,请把鼠标移到浏览器右上角,mac系统移到左上角,点小叉叉.呵呵-- #-*- coding: UTF-8 -*- import sys,ldap import ldap LDAP_HOST = '10.10.10.10' USER = 'cn=admin,dc=gccmx,dc=cn' PASSWORD = 'yourpass' BA