【问题标题】:Basic authentication with CouchDB使用 CouchDB 进行基本身份验证
【发布时间】:2013-09-14 15:08:07
【问题描述】:

我试图弄清楚如何在 CouchDB 1.3.1 中使用基本身份验证(即http://test:test@localhost:5984/mydb)。

在蒲团里:

  • 我创建了一个数据库mydb
  • 我为它设置了两个用户。在 Security 选项卡中:一位具有读取权限的成员 ["test"] 和一位管理员 ["admin"]

然后我只是测试连接。

使用 curl:

curl GET http://localhost:5984/mydb

未经授权返回401,这很好。

curl GET http://test:test@localhost:5984/mydb

返回200,因此使用 curl 一切正常。

使用浏览器或 $.ajax:

两者都在 URL http://test:test@localhost:5984/mydb 上返回 401。

那么,问题:

  • 使用curl GET 或使用$.ajax GET(或浏览器)有什么区别?
  • 我是否缺少 CouchDB 或其他允许执行此类身份验证的配置?

【问题讨论】:

    标签: curl couchdb


    【解决方案1】:

    它叫做Cross Origin Resource Sharing。基本上,浏览器可以进行的 ajax 调用是有限制的。这是一项安全功能,不允许浏览器从任何地方任意加载资源。

    您似乎希望能够做到这一点,毕竟单击会加载任意资源。但是,如果任何旧的 javascript 程序可以加载任何其他资源,那么它可能会被劫持以注入代码或窃取信息。

    CURL 通过不受 CORS 限制来解决这个问题。它只是提出您想要的任何旧请求。

    此外,您可以通过查询 localhost:5984/_session 来启动会话,此时您的所有以下查询都将使用安全令牌 cookie 发送。 jQuery.couch 是一些常用功能的不错的基本资源。

    【讨论】:

    • 从未想过 401 可能是 cors 问题。通过反向代理进行测试,瞧……谢谢!
    【解决方案2】:

    您忘记将身份验证信息放在标题中。试试吧!

     $(document).ready(function () {
         $.ajax({
          url: 'http://127.0.0.1:5984/mydb', //Your api url
          type: 'GET', //type is any HTTP method
          xhrFields: {
            withCredentials: true
          },
           headers: {
                    'Authorization': 'Basic ' + btoa('MyUser:MyPassWord')
                },
                success: function (response) {
                    var resposta = response            
                },
                error: function (err) {
                    var t = err.responseText;
                    console.log("Erro de requisição: " + err.responseText);
                }
            });
        });
    

    来源:https://zinoui.com/blog/ajax-basic-authentication

    【讨论】:

      猜你喜欢
      • 2015-08-12
      • 2017-06-13
      • 2013-05-30
      • 1970-01-01
      • 2016-05-31
      • 2017-10-06
      • 2010-12-11
      • 2016-08-24
      • 2017-08-01
      相关资源
      最近更新 更多