[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Apache2::AuthenNTML y mod_rewrite



Hola lista,

Tengo un problema con Apache2::AuthenNTML y mod_rewrite. Es posible que
esto sea un offtopic, pero como no encuentro mas informacion de este
problema puede que sea algo específico de Debian (aunque sinceramente
me temo que no).

Este es el entorno que tengo:


- Debian Etch
- Apache 2 (2.2.3-4)
- Perl 5.8.8-7
- libapachache2-mod-perl2
- Controlador de dominio con Windows 2003 Server


Tenemos una directiva <Location /> en Apache que requiere autenticación
NTLM para todo el contenido que sirve usando Apache2::AuthenNTLM,
autenticando en un dominio con un servidor Windows 2003.

Todo funciona correctamente cuando el contenido que se pide está en el propio
Apache, colgando del DocumentRoot.

El problema es que se prentende servir contenidos desde un servidor Tomcat
a través del Apache utilizando una regla con mod_rewrite.

Cuando se intenta acceder a algo a traves del RewriteRule, el servidor devuelve
directamente un error "401 Authorization Required", y no pide ni usuario ni
contraseña.

Por ejemplo, pidiendo estas URLs desde un navegador (Firefox y IE
6.0), usando la IP
del servidor:

http://10.9.133.0                    (Archivo /var/www/index.html)
<--- Funciona bien
http://10.9.133.0/example/index.html (Archivo
/var/www/example/index.html )  <--- Tambien bien

La autenticación funciona perfectamente.
Pero cuando le pedimos contenido que viene por el rewrite, no lo hace bien.
Esta es la regla del rewrite, que pasa todo lo que pidamos por "test" al Tomcat:

RewriteRule ^/test(.*) http://10.9.133.0:9673/$1 [P,L]

Si pedimos, por ejemplo, un script de pruebas del servidor llamado "test":

http://10.9.133.0/test/test  (Corresponde realmente a
http://10.9.133.0:9673/test )   <-- 401 Error


Los rewrites funcionan correctamente solo si antes hemos hecho una
autenticacion correctamente,
por ejemplo, si antes le pido la pagina raiz del servidor, me
autentico, y despues le pido el "test".

El problema es que con este comportamiento no se puede acceder
directamente a ningún contenido del rewrite,
osea, que no podriamos tener enlaces porque no funcionarían a menos
que ya tengamos sesión, ya que te suelta
el 401 directamente y no te pide ni usuario ni contraseña.

Estos son los logs de Apache para este tipo de peticiones:


[20330] AuthenNTLM: Start NTLM Authen handler pid = 20330, connection
= 139690552 conn_http_hdr = keep-alive  main =  cuser =  remote_ip =
10.9.236.124 remote_port = 13872 remote_host = <> version = 0.02
smbhandle =
[20330] AuthenNTLM: Setup new object
[20330] AuthenNTLM: Config Domain = dom_csd1  pdc = sdc1  bdc =
[20330] AuthenNTLM: Config Default Domain = Dom_csd1
[20330] AuthenNTLM: Config Fallback Domain =
[20330] AuthenNTLM: Config AuthType = basic,ntlm AuthName =
Autenticacion bajo NTLM
[20330] AuthenNTLM: Config Auth NTLM = 1 Auth Basic = 1
[20330] AuthenNTLM: Config NTLMAuthoritative = on  BasicAuthoritative = on
[20330] AuthenNTLM: Config Semaphore key = 23754 timeout = 1
[20330] AuthenNTLM: Config SplitDomainPrefix = 1
[20330] AuthenNTLM: Authorization Header <not given>
[Tue Jun 12 12:15:09 2007] [error] Bad/Missing NTLM/Basic
Authorization Header for /test/test



Aqui el navegador ya tiene el error 401. Después de un rato, aparece
otro bloque similar en la traza, supongo
que cuando da el timeout definitivo:



[20332] AuthenNTLM: Start NTLM Authen handler pid = 20332, connection
= 138433448 conn_http_hdr =   main =  cuser =  remote_ip = 127.0.0.1
remote_port = 13362 remote_host = <> version = 0.02 smbhandle =
[20332] AuthenNTLM: Setup new object
[20332] AuthenNTLM: Config Domain = dom_csd1  pdc = sdc1  bdc =
[20332] AuthenNTLM: Config Default Domain = Dom_csd1
[20332] AuthenNTLM: Config Fallback Domain =
[20332] AuthenNTLM: Config AuthType = basic,ntlm AuthName =
Autenticacion bajo NTLM
[20332] AuthenNTLM: Config Auth NTLM = 1 Auth Basic = 1
[20332] AuthenNTLM: Config NTLMAuthoritative = on  BasicAuthoritative = on
[20332] AuthenNTLM: Config Semaphore key = 23754 timeout = 1
[20332] AuthenNTLM: Config SplitDomainPrefix = 1
[20332] AuthenNTLM: Authorization Header <not given>
[Tue Jun 12 12:17:54 2007] [error] Bad/Missing NTLM/Basic
Authorization Header for /


Estos logs son iguales que cuando pides algo y al salir la ventana de
la contraseña pulsas el botón
de cancelar.


Os pongo también el archivo de configuración de Apache que estamos utilizando:




<VirtualHost *:80>
       RequestHeader set REMOTE_USER "%{REMOTE_USER}s"

       DocumentRoot /var/www/
       ServerName 10.9.133.0
       KeepAlive On


       <Location />
               PerlAuthenHandler Apache2::AuthenNTLM
               AuthName "Autenticacion bajo NTLM"
               AuthType basic,ntlm
               PerlAddVar ntdomain "Dom_csd1 sdc1"
               PerlSetVar defaultdomain Dom_csd1
               PerlSetVar ntlmdebug 1
               PerlSetVar splitdomainprefix 1
               PerlSetVar ntlmsemtimeout 1
               PerlSetVar ntlmauthoritative on
               PerlSetVar basicauthoritative on
               require valid-user
       </Location>


       ErrorLog /var/log/apache2/error.log

       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn

       CustomLog /var/log/apache2/access.log combined
       ServerSignature On

      <IfModule mod_rewrite.c>
               RewriteEngine On
               RewriteLogLevel 3
               RewriteLog /var/log/apache2/rewrite.log

               ### Content running in Tomcat
               RewriteRule ^/test(.*) http://10.9.133.0:9673/$1 [P,L]
       </IfModule>

</VirtualHost>



¿Alguna idea? ¿Porqué funciona todo bien excepto el rewrite?
¿Porque el navegador no llega a pedir la contraseña?

Antes de usar NTLM hemos usado el modulo Apache2::AuthenMSAD con esta misma
configuración y funciona correctamente en todos los casos, pero claro, no
es lo mismo porque no podemos autenticar automáticamente a los usuarios de
Windows con su cuenta de usuario del equipo, nos interesa poder usar NTLM.

Un saludo para todos y a ver si alguien me puede aportar algo de luz.

Gracias.


--
First they ignore you...
Then they laugh at you...
Then they fight you...
Then you win

Mohandas Ghandi

Use Linux



Reply to: