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

mosquitto-go-auth开启缓存后仍重复调用认证脚本问题排查

Mosquitto-go-auth缓存未生效:重复订阅仍触发JS认证脚本

问题场景

我运行iegomez/mosquitto-go-auth:latest-mosquitto_2.0.14镜像,使用以下配置开启了认证缓存,但同一用户重复发起相同订阅请求时,superuser.js和acl.js脚本仍会被重复调用(已通过脚本内console.log输出确认),不符合缓存结果复用的预期:

persistence true
persistence_location /persistence

per_listener_settings true

# ---- Default listener, SSL/TLS Support

listener 8883
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key

use_identity_as_username true
require_certificate true

auth_plugin /etc/mosquitto/go-auth.so
auth_opt_backends js

auth_opt_cache true
auth_opt_cache_type go-cache
auth_opt_auth_cache_seconds 300
auth_opt_acl_cache_seconds 300
auth_opt_auth_jitter_seconds 30
auth_opt_acl_jitter_seconds 30
auth_opt_js_user_script_path /etc/mosquitto/auth/user.js
auth_opt_js_superuser_script_path /etc/mosquitto/auth/superuser.js
auth_opt_js_acl_script_path /etc/mosquitto/auth/acl.js

排查与解决方案

1. 确认缓存键的一致性

mosquitto-go-auth的缓存键由**用户名、客户端ID、操作类型(如订阅主题)**等字段组合生成。如果两次订阅请求的客户端ID不同,会生成不同的缓存键,导致缓存不命中。务必确保重复请求使用相同的客户端ID。

2. 确保缓存配置作用于目标监听器

由于配置了per_listener_settings true,全局的缓存配置可能未正确应用到8883监听器。尝试将缓存相关配置移到listener 8883块内部,明确作用范围:

listener 8883
# ... TLS配置保持不变
use_identity_as_username true
require_certificate true

auth_plugin /etc/mosquitto/go-auth.so
auth_opt_backends js

# 缓存配置移至监听器内部
auth_opt_cache true
auth_opt_cache_type go-cache
auth_opt_auth_cache_seconds 300
auth_opt_acl_cache_seconds 300
auth_opt_auth_jitter_seconds 30
auth_opt_acl_jitter_seconds 30

auth_opt_js_user_script_path /etc/mosquitto/auth/user.js
auth_opt_js_superuser_script_path /etc/mosquitto/auth/superuser.js
auth_opt_js_acl_script_path /etc/mosquitto/auth/acl.js

3. 检查缓存初始化日志

查看容器运行日志,确认go-cache是否成功初始化。如果插件加载时出现缓存初始化错误,会自动退化为无缓存模式,此时需要排查缓存依赖或配置参数是否正确。

4. 验证订阅主题完全匹配

两次订阅的主题必须完全一致(包括通配符、大小写、斜杠数量),任何细微差异都会被视为不同的请求,导致缓存不命中。

5. 确认superuser结果是否被缓存

部分场景下,superuser验证可能未被纳入缓存逻辑。可以查看mosquitto-go-auth的源码确认superuser结果的缓存处理,或调整脚本逻辑,将superuser判断合并到ACL脚本中,统一利用ACL缓存。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:15:00