我正在使用Neo4j Enterprise 3.0.6在AWS上构建Neo4j集群,目前我正在尝试从HAProxy实例连接到Neo4j实例。出于测试目的,我从HAProxy实例到Neo4j实例curl
。使用
curl --user "neo4j:password" http://10.0.0.181:7474/user/neo4j
我得到了正确的答复:
{
"password_change_required" : false,
"password_change" : "http://10.0.0.181:7474/user/neo4j/password",
"username" : "neo4j"
}
但是,使用
进行基本授权curl -H "Authorization: Basic bmVvNGo6cGFzc3dvcmQK" http://10.0.0.181:7474/user/neo4j
Neo4j回复
{
"errors" : [ {
"code" : "Neo.ClientError.Security.Unauthorized",
"message" : "Invalid username or password."
}
}
在较旧版本的Neo4j(2.3.3,我猜),后一种方案按预期工作。我在这里有点失落。自从documentation中明确描述了将凭证作为base64编码的字符串与基本身份验证标头一起提供以外的所有内容。我在这里想念什么?
(我已经三次检查了base64编码是否正确:解码字符串会给出应该发送的凭据。)
答案 0 :(得分:1)
bmVvNGo6cGFzc3dvcmQK
是neo4j:password\n
的Base64编码,而bmVvNGo6cGFzc3dvcmQ=
是neo4j:password
的真实 Base64编码,没有任何尾随行返回。在详细模式下运行curl时可以观察它:
$ curl -v --user "neo4j:password" localhost:7474
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 7474 (#0)
* Server auth using Basic with user 'neo4j'
> GET / HTTP/1.1
> Host: localhost:7474
> Authorization: Basic bmVvNGo6cGFzc3dvcmQ=
> User-Agent: curl/7.43.0
> Accept: */*
>
< ...
以前版本的Neo4j可能会修剪已解码的字符串。
要正确编码凭据,您可以使用:
$ echo -n neo4j:password | base64
bmVvNGo6cGFzc3dvcmQ=
或
$ printf neo4j:password | base64
bmVvNGo6cGFzc3dvcmQ=