You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mosquitto-go-auth JWT JS模式:checkAcl的acc参数及自定义ACL问询

使用mosquitto-go-auth的JS模式JWT后端实现动态ACL配置问题解答

问题1:checkAcl函数的acc参数来源是什么?是否需要手动定义?

  • acc参数由mosquitto-go-auth插件自动传入,无需手动定义。
  • 它对应MQTT客户端发起的操作类型,值直接映射你提到的mosquitto ACL常量:
    • 0x01 = MOSQ_ACL_READ(读操作)
    • 0x02 = MOSQ_ACL_WRITE(写操作)
    • 0x04 = MOSQ_ACL_SUBSCRIBE(订阅操作)
    • 0x00 = MOSQ_ACL_NONE(无权限操作)
      插件会根据客户端的具体行为自动传递对应数值到checkAcl函数中。

问题2:如何基于username和Topic设置自定义ACL,例如允许用户订阅或读取topic/${username}/#?

你可以在jwt_js_acl_script中编写checkAcl函数,利用JWT Claims中的username、传入的topic和acc参数实现规则匹配,示例代码如下:

function checkAcl(username, topic, acc) {
    // 构造匹配用户专属主题的正则表达式
    const allowedTopicRegex = new RegExp(`^topic/${username}/.*$`);
    
    // 允许读(0x01)和订阅(0x04)操作访问匹配的主题
    if ((acc === 0x01 || acc === 0x04) && allowedTopicRegex.test(topic)) {
        return true;
    }
    
    // 其他操作或不匹配的主题默认拒绝
    return false;
}
  • 核心逻辑:
    1. 插件会自动从JWT Claims中提取username并传入checkAcl函数
    2. 用正则匹配符合topic/${username}/#格式的主题(.*等价于MQTT的#通配符)
    3. 判断当前操作是否为读或订阅,同时主题匹配则返回true允许操作,否则返回false拒绝

内容的提问来源于stack exchange,提问作者pumpum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:37:12