不接受 neo4j enterprise 3.0.6 base64 编码的凭据

neo4j enterprise 3.0.6 base64-encoded credentials are not accepted

我正在使用 Neo4j Enterprise 3.0.6 在 AWS 上构建 Neo4j 集群,目前正在尝试从 HAProxy 实例连接到 Neo4j 实例。出于测试目的,我 curl 从 HAProxy 实例到 Neo4j 实例。使用

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 中明确描述了使用基本身份验证 header 提供作为 base64 编码字符串的凭据。我在这里想念什么?

(我已经三次检查 base64 编码是否正确:解码字符串给出了应该发送的凭证。)

bmVvNGo6cGFzc3dvcmQKneo4j:password\n的Base64编码,而bmVvNGo6cGFzc3dvcmQ=neo4j:passwordrealBase64编码,没有任何尾随行 return。当 运行 在详细模式下卷曲时,您可以观察到它:

$ 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=