16

アプリにCouchDBの組み込みCookie認証を使用することを計画しています(これはCouchAppではなく、クライアントとデータベースの間でWebサーバーを使用していることに注意してください)。

したがって、ユーザーが最初に自分の資格情報を使用してログインするとき:

  • クレデンシャルは、WebクライアントからWebサーバー経由でCouchDBに送信されます
  • CouchDBは資格情報を認証し、Set-Cookieヘッダーを返します
  • このヘッダーはWebクライアントに送信され、データベース操作に対する後続のすべての要求はCookie、Webサーバーを介してヘッダーをCouchDBに渡すだけであることを意味します。

私はそれを確認することができましたが:

デフォルトでは、[cookie]トークンを10分間使用し続けることができます。10分後、ユーザーを再度認証する必要があります。トークンの有効期間は、couch_httpd_auth構成セクションのタイムアウト(秒単位)設定で構成できます。

この10分間がスライディングウィンドウであるか(または設定できるか)はわかりません。

つまり、ユーザーがアプリケーションを10分間使用し続けると(リクエストごとにCookieを送信する)、非アクティブな期間になるまでCookieは自動的に再設定されます(.NETのFormsAuthentication Cookieと同様の方法で)。 10分間?

使用された参照

4

1 に答える 1

33

ブラウザーの場合、(構成可能な) 10 分間スライディング ウィンドウです。CouchDB がリクエストに応答するたびに、Cookie が新しい値に更新され、ログインが効果的に更新されます。

クライアントの場合、ヘッダーが表示されたときに Cookie 値をリセットすることを忘れないでくださいSet-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 を使用してセッションを確認します。

最初の確認には{"name":"me"}(ログインしています) があることに注意してください。2 つ目は{"name":null}(ログアウトしています)。しかし、3番目は{"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」フラグがあり、常に現在の時刻にタイムアウト値を加えた値に設定されていることがわかります。

于 2012-04-28T01:35:26.170 に答える