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

Authentication CouchDB cookie是否有滑动到期时间?,authentication,cookies,couchdb,Authentication,Cookies,Couchdb,我计划在我的应用程序中使用CouchDB的内置cookie身份验证(请注意,这不是CouchApp,我在客户端和db之间使用web服务器) 因此,当用户首次使用其凭据登录时: 凭据通过web服务器从web客户端发送到CouchDB CouchDB验证凭据并返回Set Cookie头 此标头被发送到web客户端,这意味着所有后续的数据库操作请求都通过web服务器将Cookie标头传递给CouchDB 虽然我能够确定: 默认情况下,您可以继续使用[cookie]令牌10分钟。10分钟后,您需要再

我计划在我的应用程序中使用CouchDB的内置cookie身份验证(请注意,这不是CouchApp,我在客户端和db之间使用web服务器)

因此,当用户首次使用其凭据登录时:

  • 凭据通过web服务器从web客户端发送到CouchDB
  • CouchDB验证凭据并返回
    Set Cookie
  • 此标头被发送到web客户端,这意味着所有后续的数据库操作请求都通过web服务器将
    Cookie
    标头传递给CouchDB
虽然我能够确定:

默认情况下,您可以继续使用[cookie]令牌10分钟。10分钟后,您需要再次验证您的用户。令牌生存期可以使用coach_httpd_auth配置部分中的超时(秒)设置进行配置

我不清楚这10分钟是不是(或者可以设置为)一个滑动窗口

我的意思是;如果用户在整个10分钟内继续使用应用程序(在每次请求时发送cookie),cookie是否会自动重新设置(在a中),直到10分钟内处于活动状态

使用的参考资料


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

对于客户端,当您看到
Set cookie
头时,必须记住重置cookie值(或者在您的情况下将其传递给您自己的客户端)

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

下一步我会:

  • 登录
  • 等一会儿
  • 在超时之前使用cookie检查我的会话
  • 等待超时
  • 超时后,再次使用cookie检查我的会话
  • (快速)使用步骤3中设置的新cookie CouchDB检查我的会话
  • 注意,第一次确认有
    {“name”:“me”}
    (我已登录);第二个有
    {“name”:null}
    (我已注销);但是第三个再次出现了
    {“name”:“me”}
    (由于使用了更新的cookie,我仍然登录)


    在CouchDB 1.2.0及更高版本中,您可以将
    \u config/coach\u httpd\u auth/allow\u persistent\u cookies
    设置为
    “true”
    ,这样更易于查看。cookie将有一个明显的“Expires”标志,您可以看到它总是设置为当前时间加上超时值。

    “每次CouchDB响应请求时,它都会将cookie更新为新值”-我在CouchDB 1.2上没有看到这一点;我唯一一次看到任何设置Cookie头是在我登录或注销时(无论allow_persistent_cookies是true还是false)。更新:所以在Firefox中,我看到API响应上的设置Cookie头…如果我直接导航到URL。但在对Futon提出的请求的回复中没有*耸耸肩*我想我已经弄明白了:如果cookie仍然在其生命周期的前10%,它就不会被重置()。因此,在稳定的请求流中,很容易错过偶尔的Set-Cookie响应。
    $ curl http://admin:admin@localhost:5984/_config/couch_httpd_auth/timeout
    "30"
    
    $ 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"}}