Jonathan Zuckerman wrote:
On Sat, May 9, 2009 at 9:34 AM, Ross Boylan <r...@biostat.ucsf.edu> wrote:
Suppose I have apache running in front of a web application and
subversion.

I am thinking of a scenario in which the web application provides a
login page.  However, the user may also browse to web pages served by
subversion.

Is there a way that my app can have someone log in and then pass the
identity and authentication "up" to appache?  In particular, I'd want
this authentication used if the user browsed over to the subversion
repository.

I'm assume a common source, e.g., LDAP, will provide user and password
information that is the same for my app and apache.

A final wrinkle is that the application itself may access subversion via
http:// (https?) using either the identity of the user or, perhaps, a
separate identity the application runs under.




---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscr...@httpd.apache.org
  "   from the digest: users-digest-unsubscr...@httpd.apache.org
For additional commands, e-mail: users-h...@httpd.apache.org



This is a good question, it would be nice to use Apache to
authenticate all those pages instead of having to include your own
application's authentication in every page.  Let us know if you do
find a solution for this, I'd be interested to hear how it turns out.

It is in any case a question with quite a complex answer, delving deep in a lot of aspects of HTTP and Apache. The problem is that it is the question of question that one doesn't really know from which side to pick it up.. Therefore probably the lack of answers so far.

The first part probably consists of saying that the HTTP protocol, per se, is state- and connection- and session-less : each request is independent from previous and future ones. And Apache being a HTTP server, so it is too. Since keeping the information about a user's authentication across several requests would imply keeping that information somewhere on the server side, and thus introducing a form of "session", that's where the basic problem arises. Apache itself has no mechanism for that, which implies that any mechanism to do this would be outside of Apache itself.

What Apache itself can do, at the level of each individual request, is authenticating a user using either Basic or Digest authentication. Those mechanisms rely on the fact that once authenticated one time, the browser will keep sending a specific HTTP header with each subsequent request for the same "realm". Provided this is in place, at each new request, Apache will pick up this HTTPheader in the request, and internally set the corresponding internal Apache user-id *for this request*. It then belongs to the application to pick up this internal Apache user-id and do something with it.

Any other "persistent" authentication mechanism would have to rely on a cookie sent to the browser, which either "contains" the authentication itself, or contains some identifier which refers to something stored at the server side and which in turn contains this authentication. Under the appropriate setup, the browser would then return this cookie at each subsequent request.
Apache itself will not decode this cookie nor do anything with it.
Again, it belongs to the application to do so.

I would imagine (but I am not sure), that the various mod_auth* modules that belong to the standard Apache distribution, do something of the kind (I mean, avoid doing a new lookup in LDAP or a database at each request, by storing some information in some kind of cache).

So, to get back to OP question, in the way that he describes it, my comment would be : if you want to use the user authentication across several applications, then you should /not/ do the authentication at the level of one application in particular, and then try to "pass it up to Apache". You should do it at some higher level, for /all/ applications, and "pass it down" to each application (including yours). And you should make sure that the mechanism used to authenticate and store this authentication across several requests, can be understood by all applications (SVN being one, yours being another). If it that series of applications there are some that you do not control (like SVN), then I believe the only standard mechanism would be to set Apache's internal user-id at each request.


As to your "final wrinkle", I think you need to be a bit clearer as to what you want there. What determines the choice of whether a user has to login, or gets some standard user-id ? And what would this standard user-id be ?

(As an idea : it is possible to implement a scheme whereby a user gets some "automatic" id if he calls from a specific IP address (or range of addresses). And even possible to organise that, if the IP comparison fails, then they would get a login page. But not from any standard Apache module, you'd need something customised for that. Or, have a look at the existing library of mod_perl authentication solutions, for example here :
http://cpan.uwinnipeg.ca/search?query=apache2%3A%3Aauth&mode=dist
)






---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscr...@httpd.apache.org
  "   from the digest: users-digest-unsubscr...@httpd.apache.org
For additional commands, e-mail: users-h...@httpd.apache.org

Reply via email to