Подтвердить что ты не робот

Имеет ли cookie CouchDB скользящее время истечения срока действия?

Я планирую использовать CouchDB встроенную аутентификацию cookie для моего приложения (обратите внимание, что это не CouchApp, я использую веб-сервер между моим клиентом и db).

Поэтому, когда пользователь сначала регистрируется со своими учетными данными:

  • Учетные данные отправляются в CouchDB с веб-клиента через веб-сервер.
  • CouchDB аутентифицирует учетные данные и возвращает заголовок Set-Cookie
  • Этот заголовок отправляется веб-клиенту и означает, что все последующие запросы для операций с базой данных просто передаются в заголовок Cookie в CouchDB через веб-сервер.

Пока я был уверен, что:

По умолчанию вы можете использовать токен [cookie] в течение 10 минут. Через 10 минут вам нужно снова подтвердить подлинность своего пользователя. Время жизни токена может быть настроено с настройкой таймаута (в секундах) в разделе конфигурации couch_httpd_auth.

Мне не ясно, будет ли этот 10-минутный период (или может быть установлен) скользящим окном.

Под этим я подразумеваю; если пользователь продолжает использовать приложение в течение всего 10 минут (отправка файла cookie по каждому запросу), будет автоматически перезагружаться файл cookie (в аналогично методу cookie FormsAuthentication в .NET) до периода активности в течение 10 минут?

Используемые ссылки

4b9b3361

Ответ 1

Для браузера (настраиваемый) 10-минутный период - скользящее окно. Каждый раз, когда CouchDB отвечает на запрос, он обновляет cookie до нового значения, эффективно обновляя логин.

Для клиента вы должны помнить reset значение cookie, когда вы видите заголовок Set-Cookie (или передаете его своему собственному клиенту в вашем случае).

Например, у меня короткий тайм-аут (30 секунд):

$ curl http://admin:[email protected]:5984/_config/couch_httpd_auth/timeout
"30"

Далее я:

  • Войти
  • Подождите немного.
  • Проверьте мой сеанс с файлом cookie, перед таймаутом
  • Дождитесь истечения времени ожидания
  • Проверьте мою сессию с файлом cookie снова, после таймаута
  • (Быстро) проверьте мою сессию с новым cookie CouchDB, установленным на шаге 3

Обратите внимание, что первое подтверждение имеет {"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", который вы можете видеть, всегда установлен на текущее время плюс ваше значение таймаута.