Re: Does mod_auth_digest not determine session expiration?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/22/13 6:07 AM, Allasso Travesser wrote:
> So I believe that mod_auth_digest has no and uses no mechanism for tracking
> sessions, and always operates in a stateless context.  In essence, for each
> request it checks the request header for proper login metadata, and if and only
> if it qualifies does it allow access, otherwise, it sends a 401.  The policy on
> prompting and gathering of login info from the user is entirely up to the browser.
> 
> Does this sound correct?

Yes and no.  mod_auth_digest doesn't provide a way to configure this, though it
probably could.

You can specify the lifetime for the nonce with AuthDigestNonceLifetime.  Which
can trigger the client side to need to produce a new request which includes an
Authorization header that uses a new nonce.

The RFC says [1]:

  The authentication session lasts until the client receives another
  WWW-Authenticate challenge from any server in the protection space. A
  client should remember the username, password, nonce, nonce count and
  opaque values associated with an authentication session to use to
  construct the Authorization header in future requests within that
  protection space. The Authorization header may be included
  preemptively; doing so improves server efficiency and avoids extra
  round trips for authentication challenges. The server may choose to
  accept the old Authorization header information, even though the
  nonce value included might not be fresh. Alternatively, the server
  may return a 401 response with a new nonce value, causing the client
  to retry the request; by specifying stale=TRUE with this response,
  the server tells the client to retry with the new nonce, but without
  prompting for a new username and password.

and [2],

   stale
     A flag, indicating that the previous request from the client was
     rejected because the nonce value was stale. If stale is TRUE
     (case-insensitive), the client may wish to simply retry the request
     with a new encrypted response, without reprompting the user for a
     new username and password. The server should only set stale to TRUE
     if it receives a request for which the nonce is invalid but with a
     valid digest for that nonce (indicating that the client knows the
     correct username/password). If stale is FALSE, or anything other
     than TRUE, or the stale directive is not present, the username
     and/or password are invalid, and new values must be obtained.

So it should be possible to change the module to force reprompting of the
password on the client by simply omitting the stale=true from the
WWW-Authenticate header.  That could be done by adding a new timeout that once
the nonce age passes it doesn't send stale=true or by a configuration flag that
specifies that the sale=true isn't sent when the nonce lifetime has expired.

This all assumes that the clients actually follow the RFC (and interpret the
same way I am) in this regard and I haven't bothered to test that.

The RFC ultimately says nothing about how long a client should cache the
credentials.  It implies that the client should prompt the user for credentials
if stale isn't true, but given that browsers have password caching, I'd suspect
that even the above may not be reliable since some browsers may simply try
their cached credentials first.

[1] http://www.ietf.org/rfc/rfc2617.txt (section 3.3)
[2] http://www.ietf.org/rfc/rfc2617.txt (section 3.2.1)


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@xxxxxxxxxxxxxxxx
For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx





[Index of Archives]     [Open SSH Users]     [Linux ACPI]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Squid]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux