如何检查用户令牌在CouchDB中是否仍然有效?

问题描述:

当您想要与用户一起登录时,您会发送一个POST请求到http://localhost:5984/_session并获取一个cookie。此cookie默认有效10分钟,并存储在我的$_COOKIE变量中。如何检查用户令牌在CouchDB中是否仍然有效?

在我的场景中,我希望用户能够根据他登录的事实(例如,具有有效令牌)与我的网站进行交互。我的问题是如何检查用户cookie是否仍然对我的CouchDB有效?

here借用:

CouchDB的饼干算法(查看源)基本上是data = username + ':' + timestamp; base64(data + ':' + sha_mac(data, secret))。其中secretcouch_httpd_auth.secret值加用户的盐值。

这意味着如果您只想检查时间戳,您可以Base64解码cookie,然后从结果中提取时间戳,并与当前时间进行比较。

如果您想实际验证cookie有效(即不伪造),您需要知道用户的密码salt和服务器密码。如果这是客户端应用程序,那很危险。即使它是一个服务器应用程序,它也会将敏感信息放在更多的地方,这会带来额外的安全风险。这些风险是否值得,取决于你和你的实施。

+0

伟大的建议,但我认为这不是我应该执行的,因为你提到的缺点。如果您只想在登录用户的上下文中运行服务器端操作(例如,函数),您会亲自使用此方法吗? – Magiranu

+1

@Magiranu:我可能只是用CouchDB服务器('GET/_session')检查令牌,让CouchDB验证它。如果引入性能问题,可以将其缓存在服务器上。我会第一次做查找,然后缓存时间戳和完整的cookie;那么你不需要为每个请求重新验证cookie,并且仍然可以信任时间戳(因为完整的令牌先前已经过验证) – Flimzy

+0

对于“检查令牌”,您意味着在GET请求中通过头部发送cookie ? (Souce:http://docs.couchdb.org/en/2.1.0/api/server/authn.html#get--_session) – Magiranu