在mosqui中以编程方式设置访问控制限制

2024-05-18 06:12:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个将使用mqtt的应用程序。我将使用python库。我一直倾向于使用mosquitto,但找不到为它设置访问控制限制的编程方法。我正在编写的应用程序需要能够区分用户,并且只允许他们订阅某些主题。当前的解决方案看起来是从配置文件中完成的。Mosquito是否有一个可扩展的访问控制限制解决方案?如果不知道,您知道存在这种情况的mqtt代理吗?


Tags: 方法用户应用程序代理主题配置文件编程情况
3条回答

你可以写一个插件来处理这个问题。有关一些示例,请参见http://mosquitto.org/2013/07/authentication-plugins/

如果你在Mosquito邮件列表上询问,你可能会找到更多的答案。

即使这可能不再与你有关,其他人也会发现它很有用。我跟着莫斯奎托的man page

有两个配置文件,一个是一般的,比如mosquitto.conf,另一个是ACL(访问控制列表),比如acl.conf

mosquitto.conf启用用于访问控制的acl.conf文件:

acl_file acl.conf

acl.conf定义访问控制行为:

# users can anonymously publish to the topic 'in'
topic write in
# users can subscribe topics named 'out/%u', where %u is the user's name
pattern read out/%u

# an admin may subscribe to 'in' 
# and publish to all subtopics of 'out/' (note the +)
user adminWithSecretName
topic read in
topic write out/+

我们执行mosquitto -c mosquitto.conf以使用配置文件运行mosquitto。

在这种情况下,可以使用随机生成的用户名建立动态身份验证机制。

示例:爱丽丝想订阅,以便在这里阅读私人消息。她将凭证与nonce一起发送到N1。此外,她还订阅主题out/N1,使用N1作为用户名。模式read out/%u允许这样做。

作为adminWithSecretName连接并订阅主题in的第三方服务器应用程序接收Alice的消息。它验证其真实性,然后生成一个新的nonceN2,并将其发布到Alice订阅的out/N1

从现在起——至少对于这个会话来说——out/N2是Alice在这里分别接收消息的常规主题。因此,Alice取消订阅并断开表单out/N1的连接,并订阅out/N2。第三方服务器应用程序将属于Alice的所有新消息发布到主题out/N2

进一步的考虑:可能还需要考虑安全性的其他方面,如TLS和/或每消息加密。这里讨论的配置可能还需要TLS,这取决于目标安全/隐私的级别。 另一方面,如果消息单独加密,则这可能会过时。一个,比如伊芙,可以拦截(甚至订阅!)如果她能够访问有线/无线网络流,就会看到这些消息,因为她会将秘密用户名视为纯文本。但是:当一个人已经可以访问数据流时,他/她无论如何都可以截取字节。它们都是通过TLS或每消息加密来进行加密的。同样,traffic analysis也可以应用于这两种方法。

我建议使用TLS或每封邮件加密。两者都应该得到正确的实现和应用,从而产生可比的安全性。

如果您熟悉Java,那么应该尝试HiveMQ MQTT代理:http://www.hivemq.com

有一个开放的PluginSDK,它允许您向代理编写任何类型的扩展。

您可以实现最适合您的用例的身份验证或授权方法,例如从数据库、文件。。。

基于主题的授权是一个常见的用例,HiveMQ插件指南中有一个示例。

作为HiveMQ插件开发的切入点,请参见插件入门页面:http://www.hivemq.com/documentations/getting-started-plugins/

披露:我是HiveMQ的开发人员之一。

相关问题 更多 >