LDAP 认证

LDAP 认证使用外部 LDAP 服务器作为认证数据源,可以存储大量数据,同时方便与外部设备管理系统集成。

插件:

  1. emqx_auth_ldap

emqx_auth_ldap 插件同时包含 ACL 功能,可通过注释禁用。 目前版本仅支持 OpenLDAP,不支持 Microsoft Active Directory。

LDAP 配置

要启用 LDAP 认证,需要在 etc/plugins/emqx_auth_ldap.conf 中配置以下内容:

  1. # etc/plugins/emqx_auth_ldap.conf
  2. auth.ldap.servers = 127.0.0.1
  3. auth.ldap.port = 389
  4. auth.ldap.pool = 8
  5. ## ldap 的绑定专有名称(DN)
  6. auth.ldap.bind_dn = cn=root,dc=emqx,dc=io
  7. ## ldap 的绑定密码
  8. auth.ldap.bind_password = public
  9. ## ldap 的查询超时时间
  10. auth.ldap.timeout = 30s
  11. ## ldap 的设备专有名
  12. auth.ldap.device_dn = ou=device,dc=emqx,dc=io
  13. ## ldap 的匹配对象类
  14. auth.ldap.match_objectclass = mqttUser
  15. ## ldap 的用户名属性类型
  16. auth.ldap.username.attributetype = uid
  17. ## ldap 的密码属性类型
  18. auth.ldap.password.attributetype = userPassword
  19. ## TLS 配置项
  20. ## auth.ldap.ssl.certfile = etc/certs/cert.pem
  21. ## auth.ldap.ssl.keyfile = etc/certs/key.pem
  22. ## auth.ldap.ssl.cacertfile = etc/certs/cacert.pem
  23. ## auth.ldap.ssl.verify = verify_peer
  24. ## auth.ldap.ssl.fail_if_no_peer_cert = true

LDAP Schema

需要在 LDAP schema 目录配置数据模型,默认配置下数据模型如下:

/etc/openldap/schema/emqx.schema

  1. attributetype ( 1.3.6.1.4.1.11.2.53.2.2.3.1.2.3.1.3 NAME 'isEnabled'
  2. EQUALITY booleanMatch
  3. SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
  4. SINGLE-VALUE
  5. USAGE userApplications )
  6. attributetype ( 1.3.6.1.4.1.11.2.53.2.2.3.1.2.3.4.1 NAME ( 'mqttPublishTopic' 'mpt' )
  7. EQUALITY caseIgnoreMatch
  8. SUBSTR caseIgnoreSubstringsMatch
  9. SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  10. USAGE userApplications )
  11. attributetype ( 1.3.6.1.4.1.11.2.53.2.2.3.1.2.3.4.2 NAME ( 'mqttSubscriptionTopic' 'mst' )
  12. EQUALITY caseIgnoreMatch
  13. SUBSTR caseIgnoreSubstringsMatch
  14. SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  15. USAGE userApplications )
  16. attributetype ( 1.3.6.1.4.1.11.2.53.2.2.3.1.2.3.4.3 NAME ( 'mqttPubSubTopic' 'mpst' )
  17. EQUALITY caseIgnoreMatch
  18. SUBSTR caseIgnoreSubstringsMatch
  19. SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  20. USAGE userApplications )
  21. objectclass ( 1.3.6.1.4.1.11.2.53.2.2.3.1.2.3.4 NAME 'mqttUser'
  22. AUXILIARY
  23. MAY ( mqttPublishTopic $ mqttSubscriptionTopic $ mqttPubSubTopic) )
  24. objectclass ( 1.3.6.1.4.1.11.2.53.2.2.3.1.2.3.2 NAME 'mqttDevice'
  25. SUP top
  26. STRUCTURAL
  27. MUST ( uid )
  28. MAY ( isEnabled ) )
  29. objectclass ( 1.3.6.1.4.1.11.2.53.2.2.3.1.2.3.3 NAME 'mqttSecurity'
  30. SUP top
  31. AUXILIARY
  32. MAY ( userPassword $ userPKCS12 $ pwdAttribute $ pwdLockout ) )

编辑 ldap 的配置文件 slapd.conf 引用 Schema:

/etc/openldap/slapd.conf

  1. include /etc/openldap/schema/core.schema
  2. include /etc/openldap/schema/cosine.schema
  3. include /etc/openldap/schema/inetorgperson.schema
  4. include /etc/openldap/schema/ppolicy.schema
  5. include /etc/openldap/schema/emqx.schema
  6. database bdb
  7. suffix "dc=emqx,dc=io"
  8. rootdn "cn=root,dc=emqx,dc=io"
  9. rootpw {SSHA}eoF7NhNrejVYYyGHqnt+MdKNBh4r1w3W
  10. directory /etc/openldap/data