【问题标题】:How to use transactional Cypher HTTP endpoint and new REST API Authentication and Authorization in Neo4j 2.2.x with JQuery如何在带有 JQuery 的 Neo4j 2.2.x 中使用事务性 Cypher HTTP 端点和新的 REST API 身份验证和授权
【发布时间】:2015-02-24 15:26:46
【问题描述】:

我正在寻找一个代码示例,使用新的 REST API Authentication and Authorization 参数在 Neo4j 2.2.x Transactional Cypher HTTP endpoint 上使用 JQuery 创建 REST POST 请求。

在 Neo4j 2.2 版本之前,我使用 Legacy Cypher HTTP 端点(已弃用)通过以下代码执行 Cypher 查询:

$.post("http://localhost:7474/db/data/transaction/commit",
{
    "query": query,
    "params": {}
}, "json")...

但我想迁移到 2.2 并使用带有用户身份验证参数的事务端点。

我找不到用于创建此类请求的正确标头和参数组合。这就是我寻找代码示例的原因。

最好是使用跨域请求的示例,但同一域上的示例也会有所帮助。

【问题讨论】:

    标签: javascript jquery rest authentication neo4j


    【解决方案1】:

    对于身份验证,您需要为请求提供额外的 HTTP 标头:

    Authorization: Basic realm="Neo4j" <base64>
    

    其中&lt;base64&gt;username:password 的base64 编码字符串。

    不是 jquery ninja,但我想最简单的方法是使用 ajax 默认设置授权标头:

    $.ajaxSetup({
       headers: { "Authorization": 'Basic realm="Neo4j' <base64>'}
    });
    

    应用此默认值后,您上面的$.post 应该可以工作。

    【讨论】:

    • 我已经尝试使用此标头,但出现以下错误:加载资源失败:服务器响应状态为 401(未授权)tempsajax.html:1 XMLHttpRequest 无法加载localhost:7474/db/data/transaction/commit。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'localhost:63342' 不允许访问。响应的 HTTP 状态代码为 401。我在 localhost 中使用这两个服务器,但我认为这与跨域问题有关。
    【解决方案2】:

    该问题已在 2.2.0-RC01 中得到修复,我可以使用以下示例代码将事务 Cypher HTTP 端点与身份验证一起使用:

    $.ajaxSetup({
        headers: {
            // Add authorization header in all ajax requests
            // bmVvNGo6cGFzc3dvcmQ= is "password" base64 encoded
            "Authorization": "Basic bmVvNGo6cGFzc3dvcmQ=" 
        }
    });
    
    $.ajax({
        type: "POST",
        url: "http://localhost:7474/db/data/transaction/commit ",
        dataType: "json",
        contentType: "application/json;charset=UTF-8",
        data: JSON.stringify({"statements": [{"statement": "MATCH (n) RETURN n LIMIT 10"}]}),
        success: function (data, textStatus, jqXHR) {
            // use result data...
        },
        error: function (jqXHR, textStatus, errorThrown) {
            // handle errors
        }
    });
    

    【讨论】:

      【解决方案3】:

      授权意味着浏览器将发送一个不嵌入授权头的预检 OPTIONS 请求。

      这就是众所周知的 CORS。

      目前 Neo4j 服务器不会使用适当的 Access-Control-Allow-Headers 回复 OPTIONS 请求。 此功能已在源代码中实现,并将与 GA 版本一起发布,我希望这周会发布。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-01
        • 1970-01-01
        • 2013-09-30
        • 2012-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多