【发布时间】:2015-11-24 08:42:21
【问题描述】:
我正在开发一个应用程序,它将使用 CouchDB 为用户存储一些数据。但我不希望用户直接登录 CouchDB。
我将拥有一个应用客户端(移动/网络)、一个应用服务器和 CouchDB 服务器。客户端应用程序将向应用程序服务器进行身份验证,那么我的理想方案是让我的应用程序服务器以编程方式对用户进行身份验证,然后仅将 10 分钟的 cookie 发送到客户端应用程序。
也就是说,我希望应用服务器代表应用客户端的用户从 CouchDB 服务器请求一个 Cookie,然后只将 cookie 发送给应用客户端。
应用服务器可以代表经过身份验证的用户发布到 _session,但这需要:
- 在应用服务器中维护用户密码列表
- 为所有用户使用一个已知的单一密码
- 为每个身份验证请求将密码重置为随机值
出于安全原因,#3 似乎是最好的,但这似乎是额外的工作,并且是到数据库的额外往返行程(虽然不是很贵)。所以我的问题是:作为管理员,有没有什么方法可以代表用户生成 cookie,而不使用用户的密码?
这也可能允许我完全拒绝对 _session 的请求,除了来自我的应用服务器的请求,作为一项附加的安全措施。
为了完整起见,我还要提一下,我已经查看了这些其他选项,发现它们需要:
-
x_auth_token 永不过期的事实让我感到担忧。这意味着受损的令牌将永远授予对用户数据的访问权限。而且 AFAICT,如果不更改用户名或服务器密码(这实际上也会使其他所有人的身份验证令牌无效),甚至无法使令牌失效。但也许我在这里遗漏了什么?
-
这似乎只是解决了问题。现在,我必须存储 OAuth 机密,而不是在我的服务器应用程序中存储用户的密码。另外,现在我的服务器和客户端代码一定更复杂。
【问题讨论】: