2016-08-03 42 views
0

Mithilfe des Url-Rewrite-Moduls möchte ich eine Umschreibung basierend auf einem Wert ausführen, der während eines benutzerdefinierten Authentifizierungsprozesses abgerufen wurde.URL Rewrite-Umleitung basierend auf PostAuthenticate-Ergebnissen

Während der PostAuthenticateRequest versuche ich den HTTP-Header mit HttpContext.Current.Request.Headers.Add("name", "value"); zu setzen, die auf dem Anfrageobjekt sichtbar ist, bevor es das HTTPModule verlässt.

Jedoch in der URL-Rewrite, eine sehr grundlegende Bedingung fehlschlägt, da es keinen Text unter dem HTTP_name gibt.

<rule name="customrule" enabled="true" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
    <add input="{HTTP_name}" pattern=".+" /> <!-- doesn't work --> 
    <!-- <add input="{HTTP_name}" pattern=".*" /> works --> 
    </conditions> 
    <action type="Rewrite" url="https://someotherdomain/{R:0}" /> 
</rule> 

Ändern des Musters auf der Bedingung. * Lässt die Regel Pass aber die URL kommt als https:///{R:0}. Wenn ich manuell den name Header vor anschließe, der die Ressource vom Server anfordert, kann er Daten finden. Leider habe ich die Daten nicht auf dem bis eine Anfrage gestellt wurde.

Kann ich Header über die IIS-Module hinweg verwenden? Wie kann ich den Wert vom PostAuthenticate zum URL Rewrite bekommen?

Antwort

0

Pro dieses Blog http://blogs.iis.net/wonyoo/relationship-between-application-request-routing-and-url-rewrite-modules die ARR-Implementierung tritt irgendwann nach dem URL Rewrite und ist der eigentliche Proxy für externe Server.

Wie ich es verstehe, zieht das Url Rewrite-Modul die Header früh in der Anfrage-Pipeline. Daher hätte das Url-Rewrite-Modul keinen Zugriff auf die Header. Die Pipeline wird weiterhin über die Authentifizierung & PostAuthentication ausgeführt und übergibt schließlich die Verantwortung an den Anwendungsanforderungsrouting, der Proxy zu sein.