与其他身份验证系统集成
编辑与其他身份验证系统集成编辑
如果您使用的是 Elasticsearch 安全功能不支持的开箱即用的身份验证系统,则可以创建自定义领域来与之交互以验证用户。您可以将自定义领域实现为 SPI 加载的安全扩展,作为普通 elasticsearch 插件的一部分。
实现自定义领域编辑
示例代码说明了自定义领域的结构和实现,位于 https://github.com/elastic/elasticsearch/tree/8.14/x-pack/qa/security-example-spi-extension。您可以使用此代码作为创建您自己的领域的起点。
要创建自定义领域,您需要
- 扩展
org.elasticsearch.xpack.security.authc.Realm
以与您的身份验证系统通信以验证用户。 - 在将用于创建自定义领域的类中实现
org.elasticsearch.xpack.security.authc.Realm.Factory
接口。 - 扩展
org.elasticsearch.xpack.security.authc.DefaultAuthenticationFailureHandler
以处理使用自定义领域时的身份验证失败。
将您的自定义领域打包为插件
-
为您的领域实现一个扩展类,该类扩展
org.elasticsearch.xpack.core.security.SecurityExtension
。您需要重写以下方法之一或多个@Override public Map<String, Factory> getRealms() { ... }
getRealms
方法用于提供类型名称到将用于创建领域的Factory
的映射。@Override public AuthenticationFailureHandler getAuthenticationFailureHandler() { ... }
getAuthenticationFailureHandler
方法用于可选地提供自定义AuthenticationFailureHandler
,它将控制 Elasticsearch 安全功能在某些身份验证失败事件中的响应方式。@Override public List<String> getSettingsFilter() { ... }
Plugin#getSettingsFilter
方法返回一个设置名称列表,这些名称应从设置 API 中过滤掉,因为它们可能包含敏感凭据。请注意,此方法不是SecurityExtension
接口的一部分,它作为 elasticsearch 插件主类的一部分提供。 - 为插件创建一个构建配置文件;我们推荐使用 Gradle。
- 为扩展创建一个
META-INF/services/org.elasticsearch.xpack.core.security.SecurityExtension
描述符文件,其中包含您的org.elasticsearch.xpack.core.security.SecurityExtension
实现的完全限定类名 - 将所有内容捆绑在一个 zip 文件中。
使用自定义领域来验证用户编辑
要使用自定义领域
-
在集群中的每个节点上安装领域扩展。您使用
install
子命令运行bin/elasticsearch-plugin
,并指定指向包含扩展的 zip 文件的 URL。例如bin/elasticsearch-plugin install file:///<path>/my-realm-1.0.zip
-
在
elasticsearch.yml
中的xpack.security.authc.realms
命名空间下添加适当领域类型的领域配置。您必须在与扩展定义的类型匹配的命名空间内定义您的领域。您可以设置的选项取决于自定义领域公开的设置。至少,您必须显式设置order
属性以控制在身份验证期间咨询领域的顺序。您还必须确保每个配置的领域都有一个不同的order
设置。如果两个或多个领域具有相同的order
,则节点将无法启动。当您在
elasticsearch.yml
中配置领域时,仅使用您指定的领域进行身份验证。如果您还想使用native
或file
领域,则必须将它们包含在领域链中。 - 重新启动 Elasticsearch。