Couchdb 外部认证

Couchdb external authentication

我正在开发一系列实用应用程序,其中每个应用程序都可以在桌面、移动和 Web 上使用。经过一番研究,我决定在客户端使用 pouchdb,在服务器使用 couchdb 来提供离线同步。

用户将能够在网络上创建一个帐户(一个 Laravel Spark 应用程序)来管理他们的应用程序 subscriptions/payments 并且还可以访问应用程序的网络版本。在移动设备和桌面设备上,用户将使用其凭据登录每个应用程序以解锁功能。

我计划在 couchdb 中采用每个用户的数据库方法,并进行过滤复制(基于文件所属的应用程序)。基本要求是用户可以在应用程序中登录一次,然后永远安全地复制到 couchdb(直到注销)。

鉴于下面概述的用例,使用 couchdb 进行身份验证的最佳方法是什么?

最后,我找到了通过 Laravel 将所有请求代理到 CouchDB 的最佳方法,利用 Passport 包进行 API 身份验证。

为此,我通过以下步骤连接到 SparkServiceProvider 中的 Spark::createUsersWith() 函数,以在用户注册时设置 CouchDB 数据库:

  1. 生成一个特定于 couchdb 的用户名并将其保存在用户记录中。
  2. 创建一个与步骤1中生成的同名的couchdb数据库。
  3. 将设计文档添加到数据库,并使用特定于应用程序的同步过滤器。
  4. 添加安全文档以仅允许 read/writes 来自数据库所有者(在后续步骤中创建)。
  5. 使用步骤 1 中生成的用户名创建 CouchDB 用户。

然后用户可以使用他们的用户名和密码登录应用程序以接收 OAuth2 密码授权令牌。

然后所有同步请求都使用授权令牌发送到我的同步代理控制器详细信息 in this gist

要保存搜索,可以将 PouchDB 设置为自动发送 OAuth 令牌,如下所示:

this._remoteDB = new PouchDB(url, {
    ajax : {
        headers : {
            "Authorization" : "Bearer " + localStorage.getItem("token")
        }
    }
});