文档章节

EMQX_AUTH_HTTP 插件使用指南

EMQX
 EMQX
发布于 08/03 15:42
字数 838
阅读 24
收藏 0

在阅读该教程之前,假定你已经了解 MQTTEMQ X 的简单知识。

emqx_auth_http 它将每个终端的接入认证访问控制事件抛给用户自己的 WebServer 以实现接入认证和ACL鉴权的功能。其架构逻辑如下:

emqx_auth_http 主要处理的事情有:*

  1. 认证:每当终端一个CONNECT请求上来时,将其携带的 ClientId、Username、Password 等参数,向用户自己配置Web Services 发起一个认证请求。成功则允许该终端连接!
  2. ACL:每当终端执行 PUBLISH 和 SUBSCRIBE 操作时,将 ClientId 和 Topic 等参数,像用户自己配置 Web Services 发起一个 ACL 的请求。成功则允许此次 PUBLISH/SUBSCRIBE

实际上,在 EMQX 的集群里面,emqx_auth_http 对于用户的 Web Services 来讲只是一个简单的、无状态的 HTTP Client,他只是将 EMQX 内部的登录认证、和ACL控制的请求转发到用户的 Web Services,并做一定逻辑处理而已。

插件配置项说明

在这里给出了其3.1.0版本的默认配置文件,虽然看着内容比较多,其实只是配置了 三个 HTTP Request 的参数

  • 终端接入认证(auth_req)
  • 判断是否为超级用户(super_req)
  • ACL请求(acl_req)

其中,我们以认证为例,其每项分别代表了:

配置项 说明
auth.http.auth_req 配置 auth_req 请求所需要访问的 URL 路径地址
auth.http.auth_req.method 配置 auth_req 请求所使用的 HTTP Method,仅支持 GET/POST/PUT
auth.http.auth_req.params 配置 auth_req 请求所携带的参数列表

而对于其中 params 项中,支持各种参数占位符,其含义见配置文件注释。例如:

auth.http.auth_req.params = clientid=%c,username=%u,password=%P

其代表的含义是,auth_req 包括三个参数,这个三个参数的 key 分别是 clientid username password 其值分别会替换为终端在接入时其真实的 ClientId Username Password

默认的所有配置如下:

##--------------------------------------------------------------------
## Authentication request.
##
## Variables:
##  - %u: username
##  - %c: clientid
##  - %a: ipaddress
##  - %P: password
##  - %cn: common name of client TLS cert
##  - %dn: subject of client TLS cert
##
## Value: URL
auth.http.auth_req = http://127.0.0.1:8991/mqtt/auth
## Value: post | get | put
auth.http.auth_req.method = post
## Value: Params
auth.http.auth_req.params = clientid=%c,username=%u,password=%P

##--------------------------------------------------------------------
## Superuser request.
##
## Variables:
##  - %u: username
##  - %c: clientid
##  - %a: ipaddress
##
## Value: URL
auth.http.super_req = http://127.0.0.1:8991/mqtt/superuser
## Value: post | get | put
auth.http.super_req.method = post
## Value: Params
auth.http.super_req.params = clientid=%c,username=%u


##--------------------------------------------------------------------
## ACL request.
##
## Variables:
##  - %A: 1 | 2, 1 = sub, 2 = pub
##  - %u: username
##  - %c: clientid
##  - %a: ipaddress
##  - %t: topic
##
## Value: URL
auth.http.acl_req = http://127.0.0.1:8991/mqtt/acl
## Value: post | get | put
auth.http.acl_req.method = get
## Value: Params
auth.http.acl_req.params = access=%A,username=%u,clientid=%c,ipaddr=%a,topic=%t

如何返回

在了解了如何配置 emqx_auth_http 插件后,剩下关键的是 Webserver 如何返回成功或者失败。

认证

认证成功:

HTTP Status Code: 200

忽略此次认证

HTTP Status Code: 200
Body: ignore

错误

HTTP Status Code: Except 200

超级用户

确认为超级用户:

HTTP Status Code: 200

非超级用户

HTTP Status Code: Except 200

ACL鉴权

允许PUBLISH/SUBSCRIBE:

HTTP Status Code: 200

忽略此次鉴权:

HTTP Status Code: 200
Body: ignore

拒绝该次PUBLISH/SUBSCRIBE:

HTTP Status Code: Except 200

更多信息请访问我们的官网 emqx.io,或关注我们的开源项目 github.com/emqx/emqx ,详细文档请访问 官方文档

© 著作权归作者所有

EMQX
粉丝 4
博文 55
码字总数 74079
作品 0
杭州
私信 提问
EMQ X 3.0-rc.3 版本发布,MQTT 消息服务器

EMQ X 3.0-rc.3版本发布,该版本重构 emqx_mqueue 代码,支持 MQTT-SN, CoAP 与 STOMP 协议: 功能改进 将 `QOS$i` 替换为 `QOS_$i` 更新配置文件中 `ACL cache` 的描述信息 重构 `emqx_mque...

emqtt
2018/11/12
787
3
EMQ X 3.0.0 版本发布,提升了 EMQ 性能

3.0.0版本 EMQ X 3.0.0版本,重新设计了订阅的 ETS 表,通过重构模块和调节 erlang 虚拟机参数提升了 EMQ 性能 功能改进 将虚拟机参数移动到单独的 vm.args 文件 emqx/emqx#2033 emqx/emqx#2...

emqtt
2018/12/31
765
0
EMQ X 3.0-Beta.2 发布,包含对 MQTT 5.0 新特性的改进

EMQ X 主工程 功能改进: 支持 MQTT 5.0 'subscription options' 增加对 MQTT 5.0 'Topic-Alias' 的校验 改进 hooks 的设计 将模块 'emqx_mqtt_properties' 重命名为 'emqx_mqtt_props' 改进 ......

emqtt
2018/09/11
1K
1
EMQ X 3.0-beta.3 发布,新增共享订阅派发策略功能

功能改进 修复 travis 构建 更新模块emqx_mqueue.erl文档说明 新增共享订阅派发策略 修复emqx_pool模块参数错误 新增强制shutdown策略 改进KeepAlive检测算法 修复跨节点消息投递 改进Bridg...

emqtt
2018/09/26
1K
0
EMQ X 3.0-rc.1 版本发布,MQTT 消息服务器

EMQ X 3.0-rc.1版本发布,该版本新增 `request` & `response` 以及 LwM2M 插件,修复 `PUBLISH` 验证问题。 功能改进 为 `CONNECT` & `CONNACK` 报文添加 `request` & `response` 支持 为未认...

emqtt
2018/10/23
798
1

没有更多内容

加载失败,请刷新页面

加载更多

CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
12分钟前
2
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
5
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0
VUE 计算属性

本文转载于:专业的前端网站▶VUE 计算属性 1、示例代码 <!DOCTYPE html><html lang="zh"> <head> <meta charset="UTF-8" /> <title>vue示例</title> </hea......

前端老手
昨天
6
0
快速搭建LNMT平台和环境部署 Tomcat详解

Tomcat部署的基本概念 1. CATALINA_HOME与CATALINA_BASE分别指什么?     CATALINA_HOME指的是Tomcat的安装目录     bin:\\Tomcat一些脚本存放目录,比如启动脚本startup.bat/start...

网络小虾米
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部