我能否限制未经身份验证的用户访问_all_docs?

10

我希望能够让人们通过一个随机id的链接私密地分享文档,就像我在pastebin上发布私密链接后得到的一样。我想了解这对于CouchDB和Cloudant来说是否通用。

1个回答

16

在 Apache CouchDB 中,读取权限是针对整个数据库而非单个文档。如果用户能够从数据库中获取文档,则该用户也可以获取 _all_docs?include_docs=true

我在这个问题中详细介绍了有关CouchDB读取授权的内容。

有几种方法:

  1. 第七层防火墙或反向 HTTP 代理。这很难正确执行;对大多数人来说不可行。您必须非常熟悉 CouchDB 的 API,以确保每个可能的查询都被阻止(例如,_rewrite 绕过您的过滤器)。

  2. 每个用户一个数据库。这是 CouchDB 的本地解决方案。创建数据库非常便宜。然后,将用户可以查看的文档复制到他或她的数据库中。用户需要在 Couch 上设置密码或 OAuth 帐户。

  3. 我最近尝试了为每个用户创建数据库并使用 URL 中的唯一键立即授权的方法,感觉像您想要的东西,但在幕后,我只是创建了一些带有随机密码的一次性账户。链接指向公共页面,例如 www.example.com/pastebin/index.html?doc_id=some_docid&secret=random_secret。然后,浏览器上的 Javscript 会读取 window.location 并将该密码插入 AJAX 查询中(在授权标头中)。Couch 授予权限,用户满意。不幸的是,这需要一点试错,但它大多是简单的 Web 编程。


哦,你是Iriscouch的Jason Smith!对不起,在我的上一条评论中不知道这一点:-/ - Locohost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接