用户身份验证提供程序

可以使用 Cypher 在用户级别控制身份验证和授权,方法是在用户上设置身份验证提供程序。

要使用身份验证提供程序,您需要将dbms.security.require_local_user 配置设置设置为true。此设置要求在用户可以使用该身份验证提供程序进行身份验证和授权之前,其关联的相关身份验证提供程序必须存在于数据库中。

用户身份验证提供程序允许您将外部定义的用户(例如,在第三方 ID 提供程序(如 OIDC 或 LDAP)中)链接到 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 命令。

示例

有关如何将身份验证提供程序与不同身份验证提供程序一起使用的示例,请参阅以下部分