isN*_*247 16 authentication cookies couchdb
我打算在我的应用程序中使用CouchDB的内置cookie身份验证(请注意,这不是CouchApp,我在客户端和数据库之间使用Web服务器).
因此,当用户首次使用其凭据登录时:
Set-Cookie标头Cookie通过Web服务器将标头传递给CouchDB.虽然我已经能够确定:
默认情况下,您可以继续使用[cookie]令牌10分钟.10分钟后,您需要再次验证您的用户.可以使用couch_httpd_auth配置部分中的超时(以秒为单位)设置配置令牌生存期.
我不清楚这10分钟的时间段是(或可以设置为)滑动窗口.
我的意思是这个; 如果用户继续使用该应用程序整整10分钟(在每个请求上发送cookie),cookie将自动重新设置(与.NET中的FormsAuthentication cookie类似),直到活动期间为止10分钟?
使用的参考文献
Jas*_*ith 33
对于浏览器,(可配置的)10分钟时段是滑动窗口.每次CouchDB响应请求时,它都会将cookie更新为新值,从而有效地刷新登录.
对于客户端,您必须记住在看到Set-Cookie标题时重置cookie值(或在您的情况下将其传递给您自己的客户端).
例如,我有一个短暂的超时(30秒):
$ curl http://admin:admin@localhost:5984/_config/couch_httpd_auth/timeout
"30"
Run Code Online (Sandbox Code Playgroud)
接下来我会:
请注意,第一个确认已经{"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"}}
Run Code Online (Sandbox Code Playgroud)
在CouchDB 1.2.0及更高版本中,您可以设置_config/couch_httpd_auth/allow_persistent_cookies为"true",它使事情更容易看到.cookie会有一个明显的"Expires"标志,你可以看到它始终设置为当前时间加上你的超时值.
| 归档时间: |
|
| 查看次数: |
4133 次 |
| 最近记录: |