Solr基本身份验证插件
Solr 可以支持用户使用 BasicAuthPlugin 的基本身份验证。
您还可以使用授权插件来配置Solr,使其具有在系统中执行各种活动的权限。授权插件在“基于规则的授权插件”一节中进行了介绍。
启用基本身份验证
要使用基本身份验证,您必须先创建一个security.json文件。这个文件以及它的放置位置将在“使用security.json启用插件”一节中详细介绍。
对于基本身份验证,security.json文件必须有一个authentication部分,它定义用于身份验证的类。可以在创建文件时添加用户名和密码(例如:sha256(password+salt) hash),或者可以稍后使用基本验证API添加,如下所述。
该authorization部分与基本身份验证无关,但它是一个单独的授权插件,旨在支持 fine-grained 用户访问控制。有关更多信息,请参阅基于规则的授权插件。
示例security.json显示了如下所示的显示两个部分,以显示这些插件是如何协同工作的:
{
"authentication":{ 【1】
"blockUnknown": true, 【2】
"class":"solr.BasicAuthPlugin",
"credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="} 【3】
},
"authorization":{
"class":"solr.RuleBasedAuthorizationPlugin",
"permissions":[{"name":"security-edit",
"role":"admin"}], 【4】
"user-role":{"solr":"admin"} 【5】
}}
在这个文件中定义了几个东西,以下的解释对应于上述的序号:
- 启用基本身份验证和基于规则的授权插件。
- 参数 "blockUnknown": true 表示不允许未经身份验证的请求通过。
- 已定义了一个名为 "solr" 的用户,其中有密码 "SolrRocks"。
- "admin" 角色已定义,并且具有编辑安全设置的权限。
- "solr" 用户已被定义为 "admin" 角色。
将您的设置保存到名为security.json的本地文件中。如果您在独立模式下使用Solr,则应将此文件放在 $SOLR _home 中。
如果blockUnknown没有出现在security.json文件中,它将默认为false。这具有不需要身份验证的效果。在某些情况下,你可能需要这个;例如,如果您想要使用security.json,但尚未准备好启用身份验证。但是,您需要确保将此参数设置为true,以便在您的系统中真正启用身份验证。
如果您正在使用SolrCloud,则你必须上传security.json到ZooKeeper。您可以使用这个示例命令,确保ZooKeeper端口是正确的:
bin/solr zk cp file:path_to_local_security.json zk:/security.json -z localhost:9983
注意事项
使用基本身份验证插件时需要记住一些事项:
- 凭据默认情况下以纯文本形式发送。建议在启用基本身份验证时使用 ssl 进行通信,如启用SSL一节中所述。
- 有权访问security.json写入权限的用户将能够修改所有权限以及如何为用户分配权限。应特别注意只授予对适当用户的编辑安全性的访问权限。
- 您的网络当然应该是安全的。即使启用了基本身份验证,也不应该不必要地将Solr公开给外部世界。
编辑身份验证插件配置
身份验证API允许修改用户标识和密码。API为端点提供特定的命令来设置用户详细信息或删除用户。
API入口点
admin/authentication
此端点不是特定于集合的,因此将为整个Solr集群创建用户。如果用户需要被限制到特定的集合,那么可以使用授权规则来完成。
添加用户或编辑密码
该set-user命令允许您添加用户并更改其密码。例如,以下定义了两个用户及其密码:
curl --user solr:SolrRocks http://localhost:8983/solr/admin/authentication -H 'Content-type:application/json' -d '{
"set-user": {"tom" : "TomIsCool" ,
"harry":"HarrysSecret"}}'
删除一个用户
该delete-user命令允许您删除用户。用户密码不需要发送来删除用户。在下面的例子中,我们要求将用户ID “tom”和“harry”从系统中删除。
curl --user solr:SolrRocks http://localhost:8983/solr/admin/authentication -H 'Content-type:application/json' -d '{
"delete-user": ["tom","harry"]}'
设置属性
为身份验证插件设置任意属性。唯一受支持的属性是'blockUnknown'
curl --user solr:SolrRocks http://localhost:8983/solr/admin/authentication -H 'Content-type:application/json' -d '{
"set-property": {"blockUnknown":false}}'
在SolrJ中使用BasicAuth
在SolrJ中,需要为每个请求设置基本认证凭证,如下例所示:
SolrRequest req ;//create a new request object
req.setBasicAuthCredentials(userName, password);
solrClient.request(req);
查询例子:
QueryRequest req = new QueryRequest(new SolrQuery("*:*"));
req.setBasicAuthCredentials(userName, password);
QueryResponse rsp = req.process(solrClient);
使用BasicAuth命令行脚本
将以下行添加到solr.in.sh或solr.in.cmd文件。此示例告诉bin/solr命令行使用“basic”作为认证类型,并使用用户名“solr”和密码“SolrRocks”传递凭证:
SOLR_AUTH_TYPE="basic"
SOLR_AUTHENTICATION_OPTS="-Dbasicauth=solr:SolrRocks"