On Tue, 25 Nov 2008 19:54:46 +0100, Julian Reschke <[EMAIL PROTECTED]> wrote:
thanks a lot for this proposal which seems to go into the right
direction.
Indeed. I think this is an area with an enormous potential for improvement and
it's very encouraging to see so many great ideas about the issues involved and
how to solve them.
I didn't yet have time to look into this in detail, but it currently
seems to require the UA to still parse the HTML page. Wouldn't it be
better of the *headers* of the response (such as WW-Authenticate, Link,
...) would contain sufficient information to perform the login without
having to do that; such as a URI to POST to, plus the parameter names
for user name and password?
I agree that more should happen on the HTTP level and with more control given
to the web application. Considering the state of the next version of the HTTP
specification(s), would it perhaps be a good idea to discuss this with the HTTP
WG as well?
'WWW-Authenticate: HTML' or something similar is a step in the right direction.
I don't see it as necessary to identify the form that does the authentication,
though. Just as [1], I think that puts a burden on the user agent that really
isn't necessary.
Web application developers pulls a lot of hair doing web form-based
authentication already and are used to having control over just about every
part of it. Taking that control and responsibility away at this point is only
deterring, imho.
Instead, we should leave the control in the hands of the web application
developers and force as little as possible on to the user agent developers. The
way I see it, the following example should be enough to perform a successful
authentication:
[Request 1]
GET /administration/ HTTP/1.1
[Response 1]
HTTP/1.1 401 Unauthorized
WWW-Authenticate: HTML realm="Administration"
<!DOCTYPE html>
<html>
....
<form action="/login">
<input name="username">
<input type="password" name="password">
<input type="submit">
</form>
</html>
[Request 2]
POST /login HTTP/1.1
username=admin&password=secret
[Response 2]
HTTP/1.1 302 Found
Authorization: HTML QWxhZGRpbjpvcGVuIHNlc2FtZQ== realm="Administration"
Location: /administration/
[Request 3]
GET /administration/ HTTP/1.1
Authorization: HTML QWxhZGRpbjpvcGVuIHNlc2FtZQ== realm="Administration"
[Response 3]
HTTP/1.1 200 OK
<!DOCTYPE html>
<html>
...
<h1>Welcome!</h1>
</html>
The twist here is that it is up to the server to provide the authentication token and
through the 'Authorization' header, give the client a way to authorize future requests. I
append the "realm" parameter to the 'Authorization' header to give the server
and client a way to control authorization and more importantly deauthenticate (e.g.
logout) for different realms on the same web site.
Since more is up to the web application now, a deauthenticate works the
following way:
[Request]
POST /logout HTTP/1.1
[Response]
HTTP/1.1 200 OK
Authorization: HTML realm="Administration"
<!DOCTYPE html>
<html>
...
<h1>Good bye!</h1>
</html>
The empty token in the 'Authorization' header indicates that it should be
forgotten for the given realm by the user agent and that future requests to
resources within the same realm requires a reauthentication.
This suggestion overloads the 'Authorization' header quite a bit, but since
we're inventing a new authentication scheme that the UA needs to understand
anyway, and especially if we get the HTTP WG on board here, I think this can
only give positive effects.
The alternative is to invent a new response header to serve the same purpose, but seeing
as the request and response header -- if 'Authorization' is used -- are identical, a
typical authentication by a browser supporting the "HTML" scheme is just to
opaquely copy+pasting the entire 'Authorization' header from the request to the response.
____
[1] <http://www.w3.org/TR/NOTE-authentform>
--
Asbjørn Ulsberg -=|=- [EMAIL PROTECTED]
«He's a loathsome offensive brute, yet I can't look away»