php elasticsearch/elasticsearch使用apikey访问接口

此处使用的windows版es和kibana。

1.前提:以安装好es和kibana并正常运行,记得保存es安装完成时提示的账号密码。

2.登录kibana,创建索引并加入几条数据,可以通过kibana界面添加或者通过调用接口添加,非重点不赘述了。

3.添加ApiKey,

使用kibana界面操作添加:点击Management,点击Security下的API keys。

点击Create Api key按钮创建apikey,记得创建完后记录下首次提示的apikey的encoded,注意是encoded后的值,踩过坑==。

或者通过postman调用接口创建:

地址:http://localhost:9200/_security/api_key

Authorization选择Basic Auth,输入es账号密码

Body选择raw json格式,示例:

html 复制代码
{
  "name": "mykey",
  "role_descriptors": {
    "role-a": {
      "cluster": ["all"],
      "indices": [
        {
          "names": ["user*"],
          "privileges": ["read"]
        }
      ]
    }
  }
}

成功后返回:

html 复制代码
{
    "id": "T-PPBtta5WCCL",
    "name": "mykey",
    "api_key": "MMMMI9oXRCC_OHNJ97rrrKt",
    "encoded": "VC1QUEJ0dGE1V0NDTDpNTU1NSTlvWFJDQ19PSE5KOTdycnJLdA=="
}

接口可以明确的返回id和api_key以及encoded。

准备工作做好了,剩下的就是代码调用。

4.php框架composer安装elasticsearch/elasticsearch

5.代码调用:

php 复制代码
//获取es客户端实例
function esClient(){
    $hosts = [
        'host' => 'http://127.0.0.1:9200',
    ];
    return \Elasticsearch\ClientBuilder::create()->setHosts($hosts)->setApiKey('T-PPBtta5WCCL', 'MMMMI9oXRCC_OHNJ97rrrKt')->build();
}

其中setApiKey()方法即为调用apikey验证,两个参数id和api_key,起初用kibana生成的apikey,一直以为encoded即为apikey,看到俩参数就把name当做id使用了,结果认证失败。查看扩展代码:

结合使用kibana里的curl调用示例:

即可明白encoded是id:api_key进行了base64_encode的结果,反其道而行,对encoded进行base64_decode即可得到id和api_key了。

使用接口生产api_key的,一般不会踩到这种坑。

代码读取数据:

php 复制代码
$params = [
    'index' => 'user',
    'id' => '5',
];
$result = esClient()->get($params);
var_dump($result);

打印结果:

另外如果想直接使用es账号密码的话,直接将setApiKey方法换成setBasicAuthentication即可:

php 复制代码
function esClient(){
    $hosts = [
        'host' => 'http://127.0.0.1:9200',
    ];
    return \Elasticsearch\ClientBuilder::create()->setHosts($hosts)->setBasicAuthentication("elastic", "your_password")->build();//
}

至此基本完成,在此有个问题请教大家,es安装默认是使用的https,本人在操作过程中使用https的时候会存在异常"No alive nodes found in your cluster",遂修改了es配置文件,改成了http的形式。如果有解决方案的大佬,望告知,感谢!

相关推荐
Elasticsearch23 分钟前
Agentic CI/CD:使用 Kubernetes 部署门控,结合 Elastic MCP Server
elasticsearch
辣椒种子11 小时前
Elasticsearch 基础入门--开发elasticsearch搜索数据篇
大数据·elasticsearch·jenkins
Elastic 中国社区官方博客18 小时前
Elasticsearch:创建 geocoding workflow,并在 agent 中使用它进行位置搜索
大数据·人工智能·elasticsearch·搜索引擎·ai·语言模型
Elasticsearch1 天前
在 Kubernetes 上的依赖管理
elasticsearch
Elastic 中国社区官方博客1 天前
使用 Elasticsearch 和神经模型为复杂语言提供更好的文本分析
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
生瓜硬劈..2 天前
从写入到可查:Elasticsearch “近实时”查询原理详解
大数据·elasticsearch·搜索引擎
Elasticsearch2 天前
使用 Elasticsearch 和神经模型为复杂语言提供更好的文本分析
elasticsearch
Elastic 中国社区官方博客2 天前
Elasticsearch 9.3 增加 bfloat16 向量 支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
Elastic 中国社区官方博客2 天前
Elasticsearch 用于词形还原的开源 Hebrew 分析器
大数据·elasticsearch·搜索引擎·ai·开源·全文检索·中文分词
秃了也弱了。3 天前
elasticSearch之API:基础命令及文档基本操作
大数据·elasticsearch·搜索引擎