CouchDB cookie 是不是有滑动到期时间?
Posted
技术标签:
【中文标题】CouchDB cookie 是不是有滑动到期时间?【英文标题】:Does the CouchDB cookie have a sliding expiry time?CouchDB cookie 是否有滑动到期时间? 【发布时间】:2012-05-08 15:52:50 【问题描述】:我计划为我的应用程序使用 CouchDB 的内置 cookie 身份验证(请注意,这不是 CouchApp,我在客户端和数据库之间使用 Web 服务器)。
因此,当用户首次使用其凭据登录时:
凭据通过 Web 服务器从 Web 客户端发送到 CouchDB CouchDB 验证凭据并返回Set-Cookie
标头
此标头发送到 Web 客户端,这意味着所有后续的数据库操作请求只需通过 Web 服务器将 Cookie
标头传递给 CouchDB。
虽然我已经能够确定:
默认情况下,您可以继续使用 [cookie] 令牌 10 分钟。 10 分钟后,您需要再次验证您的用户。令牌生命周期可以通过 couch_httpd_auth 配置部分中的超时(以秒为单位)设置进行配置。
我不清楚这 10 分钟的时间段是否(或可以设置为)滑动窗口。
我的意思是;如果用户继续使用该应用程序整整 10 分钟(在每个请求上发送 cookie),cookie 会自动重新设置(在similar way to FormsAuthentication cookies in .NET 中)直到一段时间in-activity em> 10 分钟?
使用的参考文献
http://guide.couchdb.org/draft/security.html#cookies http://wiki.apache.org/couchdb/Security_Features_Overview【问题讨论】:
【参考方案1】:对于浏览器,(可配置的)10 分钟周期是一个滑动窗口。每次 CouchDB 响应请求时,都会将 cookie 更新为新值,从而有效地刷新登录。
对于客户端,您必须记住在看到 Set-Cookie
标头时重置 cookie 值(或在您的情况下将其传递给您自己的客户端)。
例如,我有一个短暂的超时(30 秒):
$ curl http://admin:admin@localhost:5984/_config/couch_httpd_auth/timeout
"30"
接下来我会:
-
登录
稍等
在超时前检查我与 cookie 的会话
等待超时
超时后再次检查我与 cookie 的会话
(快速)使用步骤 3 中设置的新 cookie CouchDB 检查我的会话
注意第一个确认有"name":"me"
(我已登录);第二个有"name":null
(我已注销);但第三个又有"name":"me"
(由于使用了更新的cookie,我仍然登录)。
$ curl -X POST -i localhost:5984/_session -d name=me -d password=secret
HTTP/1.1 200 OK
Set-Cookie: AuthSession=bWU6NEY5QjQ3QTA6Ao6zetUZUxkno37ULd2qdRRjmsc; Version=1; Path=/; HttpOnly
Server: CouchDB/1.2.0 (Erlang OTP/R15B)
Date: Sat, 28 Apr 2012 01:28:00 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 35
Cache-Control: must-revalidate
"ok":true,"name":"me","roles":[]
$ sleep 20
$ curl -i localhost:5984/_session -H Cookie:AuthSession=bWU6NEY5QjQ3QTA6Ao6zetUZUxkno37ULd2qdRRjmsc
HTTP/1.1 200 OK
Set-Cookie: AuthSession=bWU6NEY5QjQ3QkM6WonDdsAdO8p7QUlLWCZQXVAfcvU; Version=1; Path=/; HttpOnly
Server: CouchDB/1.2.0 (Erlang OTP/R15B)
Date: Sat, 28 Apr 2012 01:28:28 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 165
Cache-Control: must-revalidate
"ok":true,"userCtx":"name":"me","roles":[],"info":"authentication_db":"_users","authentication_handlers":["oauth","cookie","default"],"authenticated":"cookie"
$ sleep 10
$ curl -i localhost:5984/_session -H Cookie:AuthSession=bWU6NEY5QjQ3QTA6Ao6zetUZUxkno37ULd2qdRRjmsc
HTTP/1.1 200 OK
Server: CouchDB/1.2.0 (Erlang OTP/R15B)
Date: Sat, 28 Apr 2012 01:28:43 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 140
Cache-Control: must-revalidate
"ok":true,"userCtx":"name":null,"roles":[],"info":"authentication_db":"_users","authentication_handlers":["oauth","cookie","default"]
$ curl -i localhost:5984/_session -H Cookie:AuthSession=bWU6NEY5QjQ3QkM6WonDdsAdO8p7QUlLWCZQXVAfcvU
HTTP/1.1 200 OK
Set-Cookie: AuthSession=bWU6NEY5QjQ3RDA69pqrNVd-ClZ7_v4SkcghdZRRhCs; Version=1; Path=/; HttpOnly
Server: CouchDB/1.2.0 (Erlang OTP/R15B)
Date: Sat, 28 Apr 2012 01:28:48 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 165
Cache-Control: must-revalidate
"ok":true,"userCtx":"name":"me","roles":[],"info":"authentication_db":"_users","authentication_handlers":["oauth","cookie","default"],"authenticated":"cookie"
在 CouchDB 1.2.0 及更高版本中,您可以将_config/couch_httpd_auth/allow_persistent_cookies
设置为"true"
,这样更容易查看。 cookie 将有一个明显的“过期”标志,您可以看到它始终设置为当前时间加上您的超时值。
【讨论】:
“每次 CouchDB 响应请求时,它都会将 cookie 更新为新值”——我在 CouchDB 1.2 上没有看到这个;我唯一一次看到任何 Set-Cookie 标头是在我登录或注销时(allow_persistent_cookies 是真还是假)。 更新:所以在 Firefox 中,我 am 在 API 响应中看到 Set-Cookie 标头……如果我直接导航到 URL。但是,不在对 Futon 提出的要求的回应中? *耸耸肩* 我想我明白了:如果 cookie 仍处于其生命周期的前 10%,它不会被重置 (github.com/apache/couchdb/blob/master/src/couchdb/…)。因此,在稳定的请求流中,很容易错过偶尔的 Set-Cookie 响应。以上是关于CouchDB cookie 是不是有滑动到期时间?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以配置 OWIN Cookie 身份验证以防止某些 URL 影响滑动过期?
具有滑动到期的 IdentityServer 永远不会注销用户