9

Tengo una instancia de IIS configurada con Autenticación de Windows y Reescritura de URL, por lo que básicamente funciona como un proxy inverso. Mi servidor back-end (ejecutado en Linux) espera un encabezado REMOTE_USER. ¿Es posible configurar IIS para pasar información sobre el usuario autenticado al servidor back-end?Servidor HTTP detrás de IIS: pase los encabezados de autenticación

Respuesta

8

Si IIS está configurado para Windows Auth, entonces ARR desafiará y solo reenviará las solicitudes una vez que el usuario esté autenticado.

Es posible reenviar encabezados personalizados con la solicitud utilizando una convención de nomenclatura HTTP y el elemento serverVariables en las reglas de reescritura. Por ejemplo, en el siguiente ejemplo, la variable de servidor LOCAL_ADDR se reenvía como un encabezado denominado X-MY-HEADER.

<rule name="Reverse Proxy to MySite" stopProcessing="true"> 
    <match url="^MySite/(.*)" /> 
    <serverVariables> 
     <set name="HTTP_X_MY_HEADER" value="{LOCAL_ADDR}" /> 
    </serverVariables> 
    <action type="Rewrite" url="http://www.myothersite.com/{R:1}" /> 
</rule> 

Por desgracia, no es posible utilizar esta técnica para reenviar una cabecera REMOTE_USER. Esto se debe a que cuando el encabezado Authorization está presente, la solicitud se reenvía antes de que se ejecute el módulo de autenticación y, por lo tanto, no se establecen las variables del servidor de autenticación (cuando se asignan a los encabezados, simplemente aparecen en blanco).

Sin embargo, puede configurar IIS para usar Basic Windows Auth, y luego extraer el nombre de usuario del encabezado codificado Base64Authorization en su servidor Linux.

3

Tuve un problema similar y pensé que mencionaría cómo me las arreglé para solucionarlo. He instalado Helicon ISAPI-Rewrite 3 Lite, que es un filtro de solicitud ISAPI. Dado que se ejecuta después de la etapa de autenticación en la canalización, tiene acceso a la variable REMOTE_USER y puede reescribir la solicitud de manera que se le agregue un nuevo encabezado HTTP con REMOTE_USER como su valor. Por supuesto, esto solo ayuda si tiene algún control sobre el servidor backend para que pueda utilizar el valor de este encabezado personalizado en lugar de la variable original REMOTE_USER.

El fragmento requerido en el archivo de configuración global ISAPI-reescritura de (httpd.conf) es el siguiente:

RewriteBase/
RewriteCond %{REQUEST_URI} ^/MySite.* 
RewriteHeader X-Remote-User: .* %{REMOTE_USER} 

Los límites RewriteCond parte de esta regla a URIs comienzan con /MySite; no dude en ajustarlo según sea necesario.

Cuestiones relacionadas