用户认证提供商

通过为用户设置身份验证提供程序,可以使用 Cypher 在用户级别控制身份验证和授权。

要使用身份验证提供程序,您需要将 dbms.security.require_local_user 配置设置设为 true。此设置强制要求:关联了相关身份验证提供程序的用户必须先存在于数据库中,才能使用该身份验证提供程序进行身份验证和授权。

用户身份验证提供程序允许您将外部定义的用户(例如,OIDC 或 LDAP 等第三方 ID 提供程序中的用户)关联到 Neo4j 内部用户模型。内部模型可以定义角色(授权)、SUSPENDED(已挂起)状态、HOME DATABASE(主数据库)以及元数据,例如用户的唯一显示名称。为保持一致性,您还可以使用身份验证提供程序语法定义 native(基于密码)身份验证,包括仅限本地的用户(即只能通过密码进行身份验证的用户)。

用例

用户身份验证提供程序可用于多种用例,包括:

  • 为不同用户提供不同的身份验证提供程序(包括本地用户名/密码身份验证)。

  • 在通过外部唯一标识符(例如 OIDC 身份验证中的 sub,其本身并非用户友好的值)进行身份验证时,为用户设置任意简单易记的用户名。

  • 为外部身份验证的用户设置 HOME DATABASE

  • 为外部身份验证的用户设置 SUSPENDED 状态。

  • 使用本地授权来管理外部身份验证用户的角色。

  • 从数据库内部保留对哪些用户可以进行身份验证的完全控制权。

工作原理

当用户进行身份验证时,系统会根据数据库中身份验证提供程序的相关属性检查其标识属性。如果匹配,则该用户将与 Neo4j 用户关联,并根据与匹配的身份验证提供程序名称对应的 DBMS 安全配置设置进行授权。

匹配查找的方式取决于提供程序的类型。例如:

  • 对于 OIDC 提供程序,由 dbms.security.oidc.mysso.claims.username(默认为 sub)配置的声明将从令牌中提取,并用于查找其 IDprovider 属性分别与 OIDC 提供程序的 sub 和提供程序匹配的身份验证提供程序。

  • 对于 LDAP 提供程序,dn 用于查找 provider 属性为 ldapID 属性与提供的 dn 匹配的身份验证提供程序。

  • 对于 native(用户名/密码)提供程序,提供的用户名本身用于查找身份验证提供程序。

启用用户身份验证提供程序模式

要启用用户身份验证提供程序模式,请将配置设置 dbms.security.require_local_user 设置为 true。此设置强制要求:关联了相关身份验证提供程序的用户必须先存在于数据库中,才能使用该身份验证提供程序进行身份验证和授权。

当用户进行身份验证时,Neo4j 会搜索具有匹配身份验证提供程序的用户。如果找到匹配项,用户即可登录并成功获得授权。

迁移到身份验证提供程序模式

如果数据库中已有用户并希望迁移到身份验证提供程序模式,您可以使用 ALTER USER …​ SET AUTH 命令为每个用户附加一个身份验证提供程序。在将 dbms.security.require_local_user 更改为 true 之前,这不会影响用户按照现有方式进行身份验证和授权的能力。

一旦为用户添加身份验证提供程序的过程完成,您可以将 dbms.security.require_local_user 设置为 true 并重启 DBMS 以完成迁移。此后,只有在数据库中拥有相应身份验证提供程序的用户才能进行身份验证和授权。

使用原始 CREATE USER …​ SET PASSWORD 命令创建的现有用户隐含拥有本地(用户名/密码)身份验证提供程序,因此无需使用 SET AUTH 显式添加。

要验证用户关联了哪些身份验证提供程序,请使用 SHOW USERS WITH AUTH 命令。

示例

有关如何将身份验证提供程序与不同认证方式结合使用的示例,请参阅以下章节: