【问题标题】:How to check if user token is still valid in CouchDB?如何检查用户令牌在 CouchDB 中是否仍然有效?
【发布时间】:2017-08-08 08:52:04
【问题描述】:

当您想以用户身份登录时,您向http://localhost:5984/_session 发送POST 请求并取回cookie。此 cookie 默认有效期为 10 分钟,并存储在我的 $_COOKIE 变量中。

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

【问题讨论】:

    标签: php authentication cookies couchdb


    【解决方案1】:

    借自here:

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

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

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

    【讨论】:

    • 很好的建议,但我认为这不是我应该实施的,因为你提到的缺点。当您只想在登录用户的上下文中运行服务器端操作(例如函数)时,您会亲自使用此方法吗?
    • @Magiranu:我可能只是用 CouchDB 服务器 (GET /_session) 检查令牌,让 CouchDB 验证它。如果这引入了性能问题,您可以将其缓存在服务器上。我会第一次进行查找,然后缓存时间戳和完整的 cookie;那么您不需要为每个请求重新验证 cookie,并且仍然可以信任时间戳(因为之前验证了完整令牌)
    • 使用“检查令牌”是指在 GET 请求中通过标头发送 cookie? (来源:docs.couchdb.org/en/2.1.0/api/server/authn.html#get--_session
    • @Magiranu 是的,完全正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多