MongoDB 认证/访问控制

    打开 MongoDB 官网地址: , 选择你需要的版本,这里我们用macOS 4.4.1 版本:

    安装后启动MongoDB

    创建模块

    打开 ,点击左侧的 “模块” 选项卡,选择添加:

    选择 MongoDB 认证/访问控制模块

    image-20200928114546350

    配置 MongoDB 相关参数

    点击添加后,模块添加完成:

    image-20200928133916267

    进行身份认证时,EMQX 将使用当前客户端信息填充并执行用户配置的认证 Query,查询出该客户端在数据库中的认证数据。

    MongoDB 支持配置集合名称、认证字段、认证占位符等等参数。

    你可以在认证查询占位符中使用以下占位符,执行时 EMQX 将自动填充为客户端信息:

    • %u:用户名
    • %c:clientid
    • %C:TLS 证书公用名(证书的域名或子域名),仅当 TLS 连接时有效

    你可以根据业务需要调整认证查询,如添加多个查询条件、使用数据库预处理函数,以实现更多业务相关的功能。但是任何情况下认证查询需要满足以下条件:

    1. 查询结果中必须包含 password 字段,EMQX 使用该字段与客户端密码比对
    2. 如果启用了加盐配置,查询结果中必须包含 salt 字段,EMQX 使用该字段作为 salt(盐)值
    3. MongoDB 使用 findOne 查询命令,确保你期望的查询结果能够出现在第一条数据中

    提示

    这是默认配置使用的集合结构,熟悉该插件的使用后你可以使用任何满足条件的集合进行认证。

    访问控制集合

    MongoDB ACL 一条规则中定义了发布、订阅和发布/订阅的信息,在规则中的都是允许列表。

    进行 ACL 鉴权时,EMQX 将使用当前客户端信息填充并执行用户配置的超级用户查询,查询客户端是否为超级用户。客户端为超级用户时将跳过 ACL 查询。 同一个选择器的多个条件时实际查询中使用 MongoDB and 查询:

    你可以在查询条件中使用以下占位符,执行时 EMQX 将自动填充为客户端信息:

    • %u:用户名

    你可以根据业务需要调整超级用户查询,如添加多个查询条件、使用数据库预处理函数,以实现更多业务相关的功能。但是任何情况下超级用户查询需要满足以下条件: 查询结果中必须包含 is_superuser 字段,is_superuser 应该显式的为 true。 MongoDB 支持配置集合名称、认证字段、认证占位符等等参数。

    提示

    MongoDB ACL 规则需严格使用上述数据结构。 MongoDB ACL 中添加的所有规则都是 允许 规则,可以搭配 中 acl_nomatch = deny 使用。

    加密规则

    提示

    可参考:加盐规则与哈希方法 (opens new window)