emq连接认证,订阅发布权限控制

2023-11-09 07:20

本文主要是介绍emq连接认证,订阅发布权限控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

emq连接认证,订阅发布权限控制

连接认证

我这里使用的是HTTP认证方式,简单无代码侵入

EMQ X 默认配置中启用了匿名认证,任何客户端都能接入 EMQ X。没有启用认证插件或认证插件没有显式允许/拒绝(ignore)连接请求时,EMQ X 将根据匿名认证启用情况决定是否允许客户端连接。

关闭匿名认证

修改匿名认证开关false:
# etc/emqx.conf## Value: true | false
allow_anonymous = false

认证请求

官方文档地址: https://docs.emqx.cn/broker/v4.3/advanced/auth-http.html#%E8%AE%A4%E8%AF%81%E5%8E%9F%E7%90%86

进行身份认证时,EMQ X 将使用当前客户端信息填充并发起用户配置的认证查询请求,查询出该客户端在 HTTP 服务器端的认证数据。

配置http连接认证接口

# etc/plugins/emqx_auth_http.conf## 请求地址
auth.http.auth_req.url = http://127.0.0.1:8080/auth/isAuth.json## HTTP 请求方法
## Value: post | get | put
auth.http.auth_req.method = post## 认证请求的 HTTP 请求头部,默认情况下配置 Content-Type 头部。
## Content-Type 头部目前支持以下值:application/x-www-form-urlencoded,application/json
auth.http.auth_req.headers.content_type = application/json## 请求参数
auth.http.auth_req.params = clientid=%c,username=%u,password=%P

EMQ X 在设备连接事件中使用当前客户端相关信息作为参数,向用户自定义的认证服务发起请求查询权限,通过返回的 HTTP 响应状态码 (HTTP statusCode) 来处理认证请求。

  • 认证失败:API 返回 4xx 状态码
  • 认证成功:API 返回 200 状态码
  • 忽略认证:API 返回 200 状态码且消息体 ignore

订阅发布HTTP ACL授权

配置http连接认证接口

super user请求接口

超级用户(superuser)

客户端可拥有“超级用户”身份,超级用户拥有最高权限不受 ACL 限制。

  • 认证鉴权插件启用超级用户功能后,发布订阅时 EMQ X 将优先检查客户端超级用户身份
  • 客户端为超级用户时,通过授权并跳过后续 ACL 检查

首先查询客户端是否为超级用户,客户端为超级用户时将跳过 ACL 查询。

# etc/plugins/emqx_auth_http.conf## 请求地址
auth.http.super_req.url = http://127.0.0.1:8080/auth/isSuper.json## HTTP 请求方法
## Value: post | get | put
auth.http.super_req.method = postauth.http.super_req.headers.content-type = application/json## 请求参数
auth.http.super_req.params = clientid=%c,username=%u
ACL授权查询请求

官方文档地址: https://docs.emqx.cn/broker/v4.3/advanced/acl-http.html#acl-%E6%8E%88%E6%9D%83%E5%8E%9F%E7%90%86

不是超级用户时,查询有没有订阅发布的权限

# etc/plugins/emqx_auth_http.conf## 请求地址
auth.http.acl_req.url = http://127.0.0.1:8080/auth/isPermission.json## HTTP 请求方法
## Value: post | get | put
auth.http.acl_req.method = postauth.http.acl_req.headers.content-type = application/json## 请求参数
auth.http.acl_req.params = access=%A,username=%u,clientid=%c,topic=%t

EMQ X 在设备发布、订阅事件中使用当前客户端相关信息作为参数,向用户自定义的认证服务发起请求权限,通过返回的 HTTP 响应状态码 (HTTP statusCode) 来处理 ACL 授权请求。

  • 无权限:API 返回 4xx 状态码
  • 授权成功:API 返回 200 状态码
  • 忽略授权:API 返回 200 状态码且消息体 ignore

ACL 缓存

ACL 缓存允许客户端在命中某条 ACL 规则后,便将其缓存至内存中,以便下次直接使用,客户端发布、订阅频率较高的情况下开启 ACL 缓存可以提高 ACL 检查性能。

在 etc/emqx.conf 可以配置 ACL 缓存大小与缓存时间:

# etc/emqx.conf## 是否启用
enable_acl_cache = on## 单个客户端最大缓存规则数量
acl_cache_max_size = 32## 缓存失效时间,超时后缓存将被清除
acl_cache_ttl = 1m

清除ACL缓存

当权限发生改变,或删除权限时,此时有缓存,还是可以正常订阅发布数据,需要清除缓存

在更新 ACL 规则后,某些客户端由于已经存在缓存,则无法立即生效。若要立即生效,则需手动清除所有的 ACL 缓存:

调用HTTP API接口

官方文档地址: https://docs.emqx.cn/broker/v4.3/advanced/http-api.html#%E5%AE%A2%E6%88%B7%E7%AB%AF

首先根据用户名查询到连接信息 
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/clients/username/steve"查询到的连接信息里找到clientid,清除 ACL 缓存
$ curl -i --basic -u admin:public -X DELETE "http://localhost:8081/api/v4/clients/123456/acl_cache" 查询指定客户端的 ACL 缓存
$ curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/clients/123456/acl_cache"踢除指定客户端。注意踢除客户端操作会将连接与会话一并终结。
$ curl -i --basic -u admin:public -X DELETE "http://localhost:8081/api/v4/clients/123456"

这篇关于emq连接认证,订阅发布权限控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/374698

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

Java 连接Sql sever 2008

Java 连接Sql sever 2008 /Sql sever 2008 R2 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class TestJDBC

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(