簡體   English   中英

使用Java Neo4j Rest Api進行身份驗證以訪問服務器

[英]Authenticate to access the server with Java Neo4j Rest Api

我開始使用Neo4j Rest Api,但是當我嘗試連接服務器時,出現以下錯誤:

{
  "errors" : [ {
    "code" : "Neo.ClientError.Security.AuthorizationFailed",
    "message" : "No authorization header supplied."
  } ]
}

此錯誤似乎是正常現象,因為使用請求時我未向服務器進行身份驗證。 在Neo4j 2.2.2手冊( http://neo4j.com/docs/stable/rest-api-security.html )中,我讀到此錯誤是因為:

請求應包括一個Authorization標頭,其值為Basic,其中“ payload”是base64編碼的字符串“ username:password”。 請求示例GET http:// localhost:7474 / user / neo4j接受:application / json; charset = UTF-8授權:基本bmVvNGo6c2VjcmV0

但是我無法擺脫這個錯誤,因為我不知道如何在請求中包含標頭! 這是我的代碼中的一個請求示例:

WebResource resource = Client.create().resource( nodeEntryPointUri );   
ClientResponse response = resource.accept( MediaType.APPLICATION_JSON )
                .type( MediaType.APPLICATION_JSON )
                .entity( "{\"data\" : \"nex\"}" )
                .post( ClientResponse.class );      
response.close();

因此,如果有人可以幫助我根據我的請求向服務器進行身份驗證,那將非常有幫助!

謝謝

在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);

另一種方法是完全禁用身份驗證。 為此,請打開conf/neo4j-server.properties文件,並將dbms.security.auth_enabled設置為false 重新啟動服務器,無需身份驗證。

現在,我並不是說您應該讓任何人都可以訪問Neo4j服務器。 那是個壞主意。 但是您可以做的是使服務器僅偵聽本地網絡和/或通過(硬件)防火牆限制對運行數據庫的計算機的訪問。 另一安全級別是在鏈接到您的應用程序的docker容器內使用neo4j。

身份驗證是一項新功能,由於很多人要求,它僅以簡單形式包含在2.2版中。 我所知道的與Neo4j在生產中合作的公司並不依賴Neo4j的身份驗證功能,而是關閉它(過多的開銷)並依賴上面簡要描述的方法。

最后,只有應用程序服務器才能訪問Neo4j。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM