Am Dienstag 29 Januar 2008 10:51:00 schrieb titetluc titetluc: > Hello all Apache mod_perl2 module experts (I am a newbie with Apache), > > Hope I am clear in my explanations (my English is not so good and I had a > lot of problems explaining my needs by mail. I am not sure that everybody > will read entirely this mail ;-))))))) > > The direct question: > Is it possible to: > . use the mod_auth_basic module (or mod_auth_digest or mod_auth_ntlm) to > authenticate a client for the first request, > . then create a session tracking module (based on cookies) for the next > requests (I would write this last module in Perl) > > > The indirect question (good luck ;)) > > I am currently working on a project to develop a server hosting HTTP > applications developed with different technologies and I am in charge of > the session management (authentication along with SSO) for the HTTP-based > applications. > Applications are developed in > . PHP > . Servlet > I can not modify these applications (in term of authentication)
So , as far as I understood your problem. the first thing you should consider is writing an own mod_perl handler for the authentication phase, that way you don't have to care about the technologie of the sites below. To read about the request phase look at: http://perl.apache.org/docs/2.0/user/handlers/http.html#HTTP_Request_Cycle_Phases This is independent of what module you use, the point is at what time of the request you do the authentification. Tracking the user with a cookie is a "normal" thing. The problems would start, if the apps need to know which user logged in or not. if so you have to find a way to pass them the user id or what data the apps requires. > > My objective is to "offer" SSO, meaning that the end-user will be asked > authentication only once, when accessing PHP or servlet (backend). > The idea: an Apache module will simulate an HTTP client against the PHP or > the servlet by sending basic authentication to PHP/servlet (ok, I simplify > the problem, because the PHP or servlet container could require another > authentication mechanism) > > Apache would act as a front-end and would > . manage authentication against the client > . manage session tracking with cookies > . simulate the client authentication against the application (servlet > or PHP) by sending basic authentication to the servlet or PHP applications > (or any other mechanism, depending on the application authentication > mechanism) So , probably, you could set HTTP-header variables or environment variables, depending on what the application requires. > > I will write a session tracking module (using the PerlAuthenHandler > handler). This module will manage: > . a cookie for session tracking > . the client simulation (using basic authentication or any other > mechanism) against the back-end (PHP/Servlet) I don't think to have to rwrite anything, have a look at Apache(2)::Cookie or CGI::Cookie. > My requirement: this module has to be usable with any existing client > authentication type (mod_auth_basic, mod_auth_digest, BUT ALSO > mod_auth_ntlm, ...) Look at Apache::Session::Wrapper; > > For example, > . a client (a web services based client) uses basic authentication for the > first request then a cookie is used for the next requests > . a client (a browser) uses FORM authentication for the first request then > a cookie is used for the next requests. > . a client uses NTLM authentication .... > . a client uses digest authentication .... > > I would imagine the Apache configuration as below > > <Location /docs_protected_access_basic> > AuthType MySessionModuleVerifyCookie basic MySessionModuleGenerateCookie > .... > </Location> > > This would mean that : > . MySessionModuleVerifyCookie would be first called, verifying if the > cookie is present and correct > . If no cookie, then basic authent is requested > . if basic authent ok, then MySessionModuleGenerateCookie generates a valid > cookie > > Another example, > <Location /docs_protected_access_ntlm> > AuthType MySessionModuleVerifyCookie ntlm MySessionModuleGenerateCookie > .... > </Location> > > > I searched for Apache modules fitting my needs. The Internet community > proposes a lot of modules but all of these modules mix the different phases > I described above (authentication between client and Apache, credentials > verifications, session creation) > For example, > . mod_auth_pam: "The PAM authentication module implements Basic > authentication on top of the Pluggable Authentication Module library". This > means that the module implements basic authentication with PAM to verify > credentials but without cookie session tracking > . mod_auth_cookie_mysql: implements only FORM authentication with SQL to > verify credentials with cookie session tracking > . Apache::AuthTicket: implements only FORM authentication with any > credentials mechanism (the module is extensible) with cookie session > tracking > . Apache::AuthCookieNTLM manages only NTLM and Basic with cookie but does > not manage digest or form authentication > > My question: is it possible to serialize authentication modules in the > AuthType Apache directive ? If so, how these modules interact each others. > Another way to ask the question: is it possible to use already existing > Apache module (basic, ntlm, digest, ...) to be included in a more global > authentication/session framework ? Advantage of such a solution is that I > can reuse the existing Apache modules (basic, ntlm, digest, ...), > concentrating on my session tracking module. (I read the mod_perl2 > documentation and mod_perl2 offers only Basic and Digest authentication. It > does not offer NTLM authentication). Again, I think the solution to your problems is in writing a customized handler for the authentification phase. -- Regards Rolf Schaufelberger