9

Ho un'istanza IIS configurata con Autenticazione Windows e Riscrittura URL, quindi funziona fondamentalmente come proxy inverso. Il mio server di backend (eseguito su Linux) si aspetta un'intestazione REMOTE_USER. È possibile configurare IIS per passare le informazioni sull'utente autenticato al server di back-end?Server HTTP dietro IIS: passa le intestazioni di autenticazione

risposta

8

Se IIS è configurato per Windows Auth, quindi ARR eseguirà la verifica e inoltrerà le richieste solo dopo che l'utente è stato autenticato.

È possibile inoltrare le intestazioni personalizzate con la richiesta utilizzando una convenzione di denominazione HTTP e l'elemento serverVariables nelle regole di riscrittura. Ad esempio, nel seguente esempio la variabile server LOCAL_ADDR viene inoltrata come intestazione denominata 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> 

Purtroppo non è possibile utilizzare questa tecnica per inoltrare un colpo di testa REMOTE_USER. Questo perché quando è presente l'intestazione Authorization, la richiesta viene inoltrata prima dell'esecuzione del modulo di autenticazione e quindi le variabili del server di autenticazione non sono impostate (quando mappate alle intestazioni vengono semplicemente visualizzate in bianco).

È tuttavia possibile impostare IIS per utilizzare Basic Windows Auth e quindi estrarre il nome utente dall'intestazione Base64 codificata Authorization sul server Linux.

3

Ho avuto un problema simile e ho pensato di menzionare come sono riuscito a risolvere il problema. Ho installato Helicon ISAPI-Rewrite 3 Lite, che è un filtro di richiesta ISAPI. Poiché viene eseguito dopo la fase di autenticazione nella pipeline, ha accesso alla variabile REMOTE_USER e può riscrivere la richiesta in modo tale che venga aggiunta una nuova intestazione HTTP con il valore REMOTE_USER. Naturalmente questo aiuta solo se hai un certo controllo sul server di backend in modo da poter utilizzare il valore di questa intestazione personalizzata invece della variabile originale REMOTE_USER.

Il frammento di richieste nei ISAPI-riscrittura del file di configurazione globale (httpd.conf) è la seguente:

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

I RewriteCond limiti parte questa regola URI che iniziano con /MySite; sentiti libero di regolarlo come necessario.

Problemi correlati