---- Rainer Jung <rainer.j...@kippdata.de> wrote: > On 02.12.2011 17:49, André Warnier wrote: > > oh...@cox.net wrote: > >> ---- oh...@cox.net wrote: > >>> ---- "André Warnier" <a...@ice-sa.com> wrote: > >>>> oh...@cox.net wrote: > >>>> ... > >>>>> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" > >>>>> tomcatAuthentication="false" /> > >>>>> > >>>> That is correct. The "false" means that Tomcat will not do it's own > >>>> authentication, and will instead rely on the authenticated user-id > >>>> passed by the front-end server. > >>>> > >>>> Now could you also show us the section of your Apache front-end > >>>> configuration, containing the directives which forward the requests > >>>> to Tomcat ? > >>>> (proxy or rewrite stanzas) > >>>> > >>>> Note: the fact that the Apache/Tomcat connector (the one at the > >>>> Apache level) passes the authenticated user-id to Tomcat along with > >>>> the proxied request, depends on the fact that within Apache (more > >>>> precisely within the internal Apache "request record"), the request > >>>> is really authenticated (*). > >>>> I am saying this because in an earlier post, you mentioned that you > >>>> were using a third-party authentication package at the Apache httpd > >>>> level. > >>>> It is unlikely, but possible, that this authentication package would > >>>> use its own logic, and never "populate" the internal Apache request > >>>> record with this user-id (**). > >>>> In such a case, the automatic forwarding of the user-id by the > >>>> Apache-level connector module (mod_proxy_ajp or mod_jk) would of > >>>> course not work, because they check the internal Apache request > >>>> record, and have no knowledge of another user-id source. > >>>> > >>>> > >>>> (*) in Tomcat terms, the equivalent of populating the userPrincipal > >>>> object > >>>> (**) for example, it may act as a filter, and rely on each request > >>>> always containing a cookie which "authenticates" the request, and do > >>>> its own access control independently of Apache httpd itself > >>>> > >>> > >>> Andre, > >>> > >>> Sure. Here's the section from httpd.conf. This is testing where I > >>> purposely insert a "REMOTE_USER" HTTP header into the request being > >>> proxied. As I said, I have a sniffer on the line, and I can see the > >>> REMOTE_USER header, but still, when I get to my test JSP hosted on > >>> the Tomcat, getUserPrincipal() is returning null (don't mind the > >>> hostname in the ProxyPass, etc. I just happen to be hosting Tomcat on > >>> that machine, and WebLogic is shutdown there). > >>> > >>> > >>> # Proxy to Tomcat on weblogic1 machine, using AJP > >>> <Location /samplesajp> > >>> RequestHeader set "REMOTE_USER" "222222229test111111111111" > >>> ProxyPass ajp://weblogic1.whatever.com:8009/samplesajp > >>> ProxyPassReverse ajp://weblogic1.whatever.com:8009/samplesajp > >>> </Location> > >>> > >>> Jim > >>> > >>> > >> > >> Hi, > >> > >> BTW, I asked about this earlier, but is it possible to turn on some > >> debugging on the Tomcat side, that might help diagnose why the AJP > >> connector is not working the expected way? I'm not that familiar with > >> Tomcat or AJP logging, but I've only been able to set logging in > >> logging.properties so that there's either almost no logging or it > >> generated a ton of logging (but not stuff on AJP > >> connection/processing) :(... > >> > > Sorry, dunno. Logging is not my favorite area in Tomcat.. > > > > Also, to tell the truth, I do not know exactly /how/ the Apache user-id > > is passed to Tomcat. I strongly suspect that the "REMOTE_USER" HTTP > > header may not be it, and that it may be via what Tomcat calls "request > > attributes", and Apache calls "environment variables" (but not in the > > usual shell sense). But I don't know how this particular one may be named. > > Since you seem better at Java that I am, you may be able to find it in > > the Tomcat AJP Connector code somewhere. I would start looking for > > "request attribute" rather than "header". > > > > This page : http://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html > > seems to hint at ditto, and even mentions a request attribute named > > "remote_user" (lowercase). > > > > Maybe you could try to set this "environment variable" in Apache, and > > see where it leads you ? > > In this page : > > http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule > > it shows how to do that (but there it calls them "server variables"). > > The terminology is not very consistent.. > > Although this thread has moved forward towards the role topic, I want to > give some infos about the user forwarding by mod_jk. Some of it was > already present in previous posts. > > 1) In order to let Tomcat accept the user, you need to set > tomcatAuthentication to "false" > > 2) mod_jk will always forward the user as detected by the > following logic: > - the user as authenticated by Apache > - if this doesn't exist it will forward the value of > an Apache environment variable. The default name of the > variable is "JK_REMOTE_USER", but it can be changed using > the configuration directive "JkRemoteUserIndicator" > > 3) The user ID will *not* be forwarded in the form of a request header > > 4) The forwarded user id is logged in the JK log file on level debug > as the "user" field in the line: > > Service protocol=%s method=%s ssl=%s host=%s addr=%s name=%s port=%d > auth=%s user=%s laddr=%s raddr=%s uri=%s > > 5) There is no need to use JkEnvVar > > 6) When not using a real Apache authentication, you can instead > set the Apache environment variable JK_REMOTE_USER > e.g. via mod_setenvif or the E= syntax of mod_rewrite. > If you change the name of the env var using JkRemoteUserIndicator > use the variable name given there instead. > > 7) The Apache authenticated user can be logged in the Apache AccessLog > using "%u". Any environment variable XXX can be logged using > %{XXX}e. > > 8) The user can be logged in the Tomcat AccessLog using %u. > > 9) The user is returned by request.getRemoteUser() on the Tomcat side. > > Regards, > > Rainer >
Hi Rainier, Thanks for the great info above, esp. re. the JK_REMOTE_USER and JkRemoteUserIndicator. I'm kind of well along the way with my valve, but I still have mod_jk for one proxy section, so I'll give those a try. Thanks again, Jim --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org