Javascript REST请求弹性搜索缺少身份验证令牌
这是我第一次在这里发帖:我正在用AngularJS为前端创建一个网站,用NodeJS为后端创建一个网站。这个网站应该给我关于弹性搜索集群的信息,从Javascript REST请求弹性搜索缺少身份验证令牌,javascript,
elasticsearch,Javascript,
elasticsearch,这是我第一次在这里发帖:我正在用AngularJS为前端创建一个网站,用NodeJS为后端创建一个网站。这个网站应该给我关于弹性搜索集群的信息,从Elasticsearch索引中获取一些信息。我曾尝试使用Elasticsearch Javascript API来完成我的请求,但没有成功 我正在使用ElasticSearch5.4 以下是请求的一个示例: var client = new elasticsearch.Client ({ host: 'https://noev02pe.fr
Elasticsearch
索引中获取一些信息。我曾尝试使用Elasticsearch Javascript API
来完成我的请求,但没有成功
我正在使用ElasticSearch
5.4
以下是请求的一个示例:
var client = new elasticsearch.Client ({
host: 'https://noev02pe.fr:9200',
auth: 'user:password',
log: 'trace',
headers: {
'Authorization': 'Basic user:password',
}
});
export function connect() {
client.search({
index: 'metric-prod*',
q: 'kafka'
}
, function (error, response) {
console.log(response);
});
}
控制台上的响应为:
{ error:
{ root_cause: [ [Object] ],
type: 'security_exception',
reason: 'missing authentication token for REST request [/metric-
prod*/_search?q=kafka]',
header: { 'WWW-Authenticate': 'Basic realm="security" charset="UTF-8"'
} },
status: 401 }
我还尝试过做经典的post请求:
export function createUser(request,response,next){
var username = request.params.username;
var userData = querystring.stringify(request.body);
console.log(userData);
var options ={
hostname: 'noev02vr.fr',
port: 9200,
rejectUnauthorized: false,
path: "_xpack/security/user/"+username,
method:'POST',
headers: {
'Authorization': 'Basic ' + prodPass,
'Content-Type': 'application/json',
'Content-Length': userData.length
}
};
var post_req=http.request(options, function(res){
console.log('post user reussi');
res.on('data', function(data){
response.writeHead(res.statusCode);
response.write(data);
console.log(res.statusCode);
});
});
post_req.write(userData);
post_req.end();
}
我得到一个500的错误 基本身份验证
const { Client } = require('@elastic/elasticsearch')
const client = new Client({
node: 'https://localhost:9200', //Replace with your URL.
auth: {
username: 'elastic',
password: '*****' //Replace with your password
}
})
否则,您可以在节点URL中提供凭据
如果您已启用ssl,则这是配置
const { Client } = require('@elastic/elasticsearch')
const client = new Client({
node: 'https://localhost:9200',
auth: {
username: 'elastic',
password: '*****'
},
ssl: {
ca: fs.readFileSync('./cacert.pem'),
rejectUnauthorized: false
}
})
您可以通过此链接获取用户名和密码
基本身份验证
const { Client } = require('@elastic/elasticsearch')
const client = new Client({
node: 'https://localhost:9200', //Replace with your URL.
auth: {
username: 'elastic',
password: '*****' //Replace with your password
}
})
否则,您可以在节点URL中提供凭据
如果您已启用ssl,则这是配置
const { Client } = require('@elastic/elasticsearch')
const client = new Client({
node: 'https://localhost:9200',
auth: {
username: 'elastic',
password: '*****'
},
ssl: {
ca: fs.readFileSync('./cacert.pem'),
rejectUnauthorized: false
}
})
您可以通过此链接获取用户名和密码
胡乱猜测:在发送授权标头时,您是否忘记对用户名和密码进行base64编码?另外,官方文档使用不同的机制来配置用户/通行证,以便自动进行base64编码。谢谢你花时间回答我!我尝试了两者,但是在Javascript API中,您不需要编码,您可以直接使用user:password。这是为了你需要编码的经典http请求,这是我的变量prodPass:密码编码在base64中这一个有任何更新吗?胡乱猜测:你在发送授权头时忘记了base64编码用户名和密码吗?另外,官方文档使用不同的机制来配置用户/通行证,以便自动进行base64编码。谢谢你花时间回答我!我尝试了两者,但是在Javascript API中,您不需要编码,您可以直接使用user:password。您需要对经典的http请求进行编码,这是我的变量prodPass:base64中编码的密码。是否有更新?