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

我有以下设置:

  • 存储用户并处理认证的CouchDB数据库; 每个用户创建一个数据库
  • 使用PouchDB通过pouchdb身份验证进行同步和身份验证的Web应用程序
  • REST API服务器,用于从Web应用程序获取请求并访问CouchDB
  • 现在,REST API可以对CouchDB进行管理访问,因此当它接收到请求时,它需要进行某种形式的身份验证,以确保发件人拥有他声称有权访问的数据库的权限。 由于我使用永久会话,因此Web应用程序始终不知道用户密码(除非将其存储在localstorage中 - 显然是一个坏主意)。 会话cookie是HttpOnly ,所以我无法访问它。

    在这种情况下验证API请求的最佳方式是什么?


    加密你需要的所有东西,并将其作为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层,然后使用该层获取需要进行身份验证的详细信息。

    您可以轻松加密几百个字节,而不会遇到任何标头或Cookie大小限制。 不要在加密之前或之后,出于安全原因和之后压缩它,因为加密后的数据压缩不好。 如果任何人担心表现,那么就会对它进行基准测试,但我已经使用了比Rust更慢的语言。 上面的变体是使用memcached ie ...

     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等。

    您可以混合搭配上述内容以适应您的应用需求。

    链接地址: http://www.djcxy.com/p/81149.html

    上一篇: Authenticating a CouchDB user against an external server

    下一篇: Is there any way to programmatically generate a CouchDB cookie?