CouchDB cookie是否有滑动到期时间?

时间:2012-04-27 22:01:03

标签: authentication cookies couchdb

我打算在我的应用程序中使用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中),直到活动期间为止 10分钟?

使用的参考资料

1 个答案:

答案 0 :(得分:32)

对于浏览器,(可配置的)10分钟时段 是一个滑动窗口。每次CouchDB响应请求时,它都会将cookie更新为新值,从而有效刷新登录信息。

对于客户端,您必须记得在看到Set-Cookie标题时重置cookie值(或者在您的情况下将其传递给您自己的客户端)。

例如,我有一个短暂的超时(30秒):

$ curl http://admin:admin@localhost:5984/_config/couch_httpd_auth/timeout
"30"

接下来我会:

  1. 登录
  2. 等一会儿
  3. 在超时之前使用Cookie检查我的会话
  4. 等待超时
  5. 超时后再次使用Cookie检查我的会话
  6. (快速)使用步骤3中设置的新Cookie CouchDB检查我的会话
  7. 请注意,第一个确认有{"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会有一个明显的“Expires”标志,您可以看到该标志始终设置为当前时间加上超时值。