针对外部服务器验证CouchDB用户

时间:2016-04-08 15:30:14

标签: authentication couchdb pouchdb

我有以下设置:

  1. 存储用户并处理身份验证的CouchDB数据库;每个用户创建一个数据库
  2. 使用PouchDB通过pouchdb-authentication
  3. 进行同步和身份验证的Web应用程序
  4. 从Web应用程序获取请求并访问CouchDB
  5. 的REST API服务器

    现在,REST API具有对CouchDB的管理员访问权限,因此当它接收请求时,需要进行某种形式的身份验证,以确保发件人拥有对其声称有权访问的数据库的权限。由于我使用持久会话,因此Web应用程序始终不知道用户密码(除非我将其存储在localstorage中 - 显然是个坏主意)。会话cookie为HttpOnly,因此我无法访问它。

    在这种情况下,对API的请求进行身份验证的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

加密您需要的所有内容,并将其作为base64会话添加到cookie中。以下是序列...

 1. WebApp: Send username and password
 2. REST: Authenticate this using couch.
 3. REST: Encrypt the session along with username password and create cookie, then base64 result.
 4. REST: Send cookie to WebApp.
 5. WebApp: Alway sends cookie back to REST layer.
 6. REST layer has everything it needs to authenticate the user. 

在上面,REST层将状态传递给WebApp,它从WebApp获取所需的状态。客户端无法对其进行解密,因此它是安全的。然后,客户端将此令牌作为cookie传递回REST层,然后REST层使用它来获取验证所需的详细信息。

您可以非常轻松地加密几百个字节,而不会遇到任何标题或 cookie大小限制。之前或之后不要在加密之前或之后压缩它 出于安全原因以及因为加密数据不能很好地压缩。如果有人担心性能然后对它进行基准测试,但我已经使用了比Rust更慢的语言。上面的变化是使用memcached即......

 1. WebApp: Send username and password
 2. REST: Authenticate this using couch.
 3. REST: Store Couch session in memcahed along with username password and create cookie. The cookie is the key to memcached.
 4. REST: Send cookie to WebApp.
 5. WebApp: Alway sends cookie back to REST layer.
 6. REST: Get details from memcached. 

我使用这种技术使用标题和Cookie,它就像一个魅力。我假设你正在使用东西来防范XSRF等。

您可以混合使用以上内容以满足您的应用需求。