Sergiu Dumitriu wrote: > Niels Mayer wrote: >> On Sun, Oct 26, 2008 at 9:11 AM, Asiri Rathnayake < >> [EMAIL PROTECTED]> wrote: >> >>> As I observed with DAVExplorer, nonce is actually used throughout a >>> session. Upon login, the server generates a nonce value as bellow : nonce = >>> MD5(client_ip,time_stamp,private_key); // source : [Adding Digest Access >>> Authentication to a WebDAV Server< >>> http://www.cs.columbia.edu/%7Ehgs/teaching/ais/1998/projects/WebDAV/report.html >>>> ] >>> and sends this to the client. The client in turn uses this nonce value when >>> generating the RESPONSE hash in all following requests. >>> >> ... Which is why you can have an external "HTTPS-accessible shadow-login >> program" invoked once per DAV session, to change Xwiki's password to the >> MD5Password computed from the nonce/session-key. In my previous email I >> called this DAV login service "davlogin" (e.g. >> https://.../davlogin?user=foo&md5pass=0x0123456789ABCDEF >> ) >> >> Of course, this would have side-issues like making web-login to a user >> account in Xwiki difficult since the password would be set to the last >> session's Md5Password. I guess you could have another program "davlogout" to >> restore the normal Xwiki password. And another table in the db to store the >> regular password. >> >> Yes it's a hack. >> >> The next question is there a way to accomplish the exact same thing in code >> to achieve the same goal, but without the hack. >> >> For example, by adding a new special parameter to any DAV-originated >> request, to enable authentication based on a new MD5Password column in the >> database. The MD5Password would be used for authentication for any requests >> using the special-parameter (e.g. '?dav=true). Basically the same code used >> currently that looks up the regular password in Xwiki, should have a switch >> on if "?dav=true" to select lookup using the MD5Password column or the >> regular password column. (a pretty simple and trivial/scopable change). >> >> Also needed, an external way of setting the user-associated entry in the new >> MD5Password column to the password for the current DAV session. (akin to >> https://.../davlogin mentioned above). >> >> This new MD5Password db column represents the MD5Passwords for all active >> DAV sessions on a given wiki, while the rest of xwiki continues to work the >> same with the old password mechanism, as long as you don't give the new >> parameter ?dav=true. >> > > This is getting totally out of control. I'm against this for many reasons: > > - We're trying hard to abstract the storage mechanism. There is no > database, no table, no column. Currently there is no password column, it > is just an xwiki property like any other. And as I said before, anything > stored in the wiki is retrievable. > - Changing the user's password is not acceptable. This means that he > cannot use both the webdav and the browser at the same time. And if he > forgets to logout, he won't be able to access the wiki normally. > - Disabling the feature for "Admin" is not good. There is nothing > special about the Admin account, it is just a name we chose for a > default account. It could be called anyway, what matters is the rights > set in the wiki. There is nothing special in XWiki, everything is a > document, and all documents are equal (except those with programming > rights). We should not have special cases in our code. > - This is not going to work anyway, since we still can't store HA1 and > be able to read it back, and storing RESPONSE is not practicle, since it > depends on the visited URL. What I'm saying is that the only thing that > can be done with a hashed value is to obtain a cleartext value from the > client, hash it and compare it with what is stored in the wiki. Without > the full, unencrypted text, there's no way we can make use use of the > stored value. And since RESPONSE depends on the visited URL (and in a > more secure version on the whole request body), this makes impossible > this external "login" service. > - Although some implementations do use the same nonce for a full > session, this is wrong. The specification clearly states that the nonce > should be uniquely generated for each authentication request (see > http://tools.ietf.org/html/rfc2617#page-9 ), and by its name NONCE means > that it should be used only once.
To clarify things a bit, the specification says that the nonce is generated whenever a 401 response is sent. This does not mean after every client request, but there are no strict rules for this. It could expire after a certain amount of time, or after a number of uses, or who knows. By default, Apache httpd is configured so that nonces expire after 5 minutes. Since we're making the server, we can decide our own strategy for this expiration, so we could make it behave like a session. > - The WebDAV component should be a component, and components don't have > strong bounds to other components. So, making special cases for WebDAV > is wrong. > - And the most important reason for me is that this is ugly. The right > code should be clean, simple and elegant, not a complete hack messing > around all the platform, just so that we comply with the flawed Digest > authentication mechanism. Requiring that the password is plainly > available on the server is crazy. If any MS product fails because of > this, then it is just another sign of their stupid vendor lock-in > attempts, and I will not succumb to them. > > I don't mean to offend anybody, I'm just speaking from a technical point > of view. -- Sergiu Dumitriu http://purl.org/net/sergiu/ _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

