知识库

配置 Neo4j 使用 Active Directory 属性 samAccountName 验证来自不同 OU 的用户

从 Neo4j 3.2.2 版本开始,可以使用 Active Directory 属性 samAccountName 进行身份验证,而不是使用 LDAP Display Name 属性。以下知识库文章对此进行了详细说明:如何允许使用 Active Directory 属性 samAccountName 进行身份验证

然而,当需要对在不同 OU 下定义的用户进行身份验证和授权,并且无法在 Neo4j 配置文件中定义系统账户时,则需要稍有不同的配置。这特定于 Active Directory,并且需要使用 samAccountName 属性登录(我们发现这是常见情况)。

必须设置以下 conf/neo4j.conf 参数才能使用 samAccountName 并支持验证来自多个 OU 的用户

dbms.security.auth_enabled=true
dbms.security.auth_provider=ldap
dbms.security.ldap.host=<the LDAP hostname>

dbms.security.ldap.authentication.user_dn_template={0}@example.com
dbms.security.ldap.authorization.user_search_base=dc=example,dc=com
dbms.security.ldap.authorization.user_search_filter=(&(objectClass=user)(sAMAccountName={0}))

dbms.security.ldap.authorization.group_membership_attributes=memberOf
dbms.security.ldap.authorization.group_to_role_mapping=\
"cn=Neo4j Read Only,cn=Users,dc=example,dc=com" = reader ;\
"cn=Neo4j Read-Write,cn=Users,dc=example,dc=com" = publisher ;\
"cn=Neo4j Schema Manager,cn=Users,dc=example,dc=com" = architect ;\
"cn=Neo4j Administrator,cn=Users,dc=example,dc=com" = admin ;\
"cn=Neo4j Procedures,cn=Users,dc=example,dc=com" = allowed_role

要点

  1. 此方法奏效的主要区别在于在 user_dn_template 中指定 {0}@example.com 模式。这使得身份验证可以从根域开始,并检查整个树,无论用户位于其中的哪个位置。

  2. 请注意,您不应设置 dbms.security.ldap.authentication.use_samaccountname。这不会正常工作。

通过以下 AD 设置,我们成功验证了 Admin User 和 Support User 这两个用户。他们将分别使用 adminusersupportuser1 登录。

image

image

© . All rights reserved.