我开始使用Neo4j Rest Api但是当我尝试连接服务器时出现以下错误:
int count = fieldList.Count();
var result = string.Join(", ", fieldList.Take(count > 1 ? count - 1 : count))
+ (count > 1 ? " and " + fieldList.Last() : string.Empty);
这个错误似乎是正常的,因为我在使用请求时没有对服务器进行身份验证。在Neo4j 2.2.2手册(http://neo4j.com/docs/stable/rest-api-security.html)中我读过我收到此错误的原因是:
请求应包含一个Authorization标头,其值为Basic,其中“payload”是base64编码的字符串“username:password”。 示例请求 获取http://localhost:7474/user/neo4j 接受:application / json;字符集= UTF-8 授权:基本bmVvNGo6c2VjcmV0
但是我无法摆脱这个错误,因为我不知道如何在我的请求中包含标题!以下是我的代码中的请求示例:
{
"errors" : [ {
"code" : "Neo.ClientError.Security.AuthorizationFailed",
"message" : "No authorization header supplied."
} ]
}
因此,如果有人可以帮我根据我的要求对服务器进行身份验证,那可能会非常有用!
由于
答案 0 :(得分:5)
在Jersey 1.x中,您可以为客户端实例提供处理身份验证的过滤器:
Client client = Client.create()
client.addFilter(new HTTPBasicAuthFilter("neo4j","<mypwd>")); // <-- that's it!
WebResource resource = client.resource(
"http://localhost:7474/db/data/transaction/commit"
);
ClientResponse response = resource.accept( MediaType.APPLICATION_JSON )
.type( MediaType.APPLICATION_JSON )
.post( ClientResponse.class, someStringContainingJsonPayload);
答案 1 :(得分:1)
另一种方法是完全禁用身份验证。
为此,请打开conf/neo4j-server.properties
文件并将dbms.security.auth_enabled
设置为false
。重新启动服务器,您无需进行身份验证。
现在我不是说你应该让任何人访问Neo4j服务器。那是个坏主意。但是你可以做的是让服务器只监听本地网络和/或通过(硬件)防火墙限制对运行数据库的机器的访问。另一个安全级别是在连接到您的应用程序的docker容器中使用neo4j。
身份验证是一项新功能,仅以简单的形式包含在2.2版中,因为很多人都要求它。我所知道的与Neo4j在生产中合作的公司不依赖于Neo4j的身份验证功能,而是将其关闭(过多的开销)并依赖于上面简要描述的方法。
最后,只有应用程序服务器才能访问Neo4j。