2014-06-13 15 views
12

Setup Meine Produktion ist wie folgt:ASP.NET OAuth mit Probleme mit URL Rewrite

  • M1 - ASP.NET Webseite
  • M2 - IIS URL 2.0 + Rewrite 3.0 ARR

Verwendung IIS URL Rewrite, jede Anforderung an m2, sagen http: // m2 /app/login.aspx wird auf M1 als http umgeleitet werden: // m1/app/logi n.aspx.

Auf M1 wurde ASP.NET Open Auth auf der Website implementiert, um die externe Authentifizierung von Google zu verwenden. Wenn ein Nutzer auf die Google-Schaltfläche klickt, wird der Browser auf die Google-Anmeldeseite umgeleitet, damit sich der Nutzer authentifizieren kann.

Aber wenn die Website von M2 zugegriffen wird, URL der Umleitung, die durch .net oAuth (https: // accounts.google.com/[Abfrage-string]) auf Google umgeleitet, ersetzt wird von URL Rewrite als http: // m2/[Abfragezeichenfolge].

Also nur um klar zu sein; Wenn die Anforderung zur Authentifizierung über einen externen Authentifizierungsanbieter erfolgt, wird eine 302 Weiterleitung zurückgegeben. Oft ist die Form kann dies wie folgt aussehen:

Antwort-Header:

...

Ort: https: // accounts.google.com/o/oauth2/Auth big_long_query_string

...

Diese Umleitung von einem Server (M1) erzeugt wird, die sich hinter dem Proxy-Server sitzt (M2 - IIS URL 2.0 Rewrite + ARR 3.0). So ist der Rewrite-Server schreibt die Location-Header an:

Antwort-Header:

...

Ort: http: // M1/o/oauth2/Auth big_long_query_string

...

Was wir brauchen, ist eine Regel, die nicht die Position URL-Umleitung nicht neu schreiben. Es kann nur bestimmte Redirects als Ziel haben. In den meisten Fällen ist das hier erwähnte Verhalten erwünscht, da alle Weiterleitungen zum Haupt-Proxy-Server umgeleitet werden. Kann jemand eine Lösung oder einen Workaround für bestimmte Weiterleitungen vorschlagen?

+1

Haben Sie jemals die Lösung erarbeiten, wäre jetzt ein guter Zeitpunkt, um zu beantworten, wenn Sie getan haben, ich bin genau das gleiche Problem haben. –

+0

Lassen Sie uns diesen Sauger antworten !!!!!!! –

+0

Wir müssten die Rewrite-Regeln haben, um zu überprüfen, was falsch ist. –

Antwort

0

Check out Application Request Routing Einstellungen unter IIS> [Server]> Routing von Anwendungsanforderungen und auf Aktionen Seitenleiste Server-Proxy-Einstellungen> für Reverse-Rewrite-Host in Antwort-Header. Für das gewünschte Verhalten deaktivieren Sie das Kontrollkästchen. Das ist eine Server-Level-Einstellung, verantwortungsvoll verwenden.

Sie können auch %WinDir%\System32\Inetsrv\Config\applicationHost.config bearbeiten. Grundsätzlich die folgende Zeile in der Datei zwischen <system.webServer> Tags einfügen/aktualisieren.

<proxy enabled="true" reverseRewriteHostInResponseHeaders="false" /> 

würde ich diese Einstellung annehmen, auch pro Standort verfügbar sein, aber meine Versuche auf web.config-Dateien für die Proxy-Einstellungen, die nicht bestätigen.

0

Auschecken global.asax. ist ein HTTPModule. Alle Anfragen durchlaufen diese Datei und andere Module, bevor sie Ihre Seitenhandler erreichen. Verwenden Sie diese bestimmte Aufgaben auf Ihre Anfrage oder Antwort auszuführen, wie url Routing, globale Fehlerbehandlung usw. Diese Datei wird verwendet, Anwendung und Sitzungsebene Ereignisse zu implementieren, wie zum Beispiel:

Application_Init - gefeuert, wenn eine Anwendung zuerst initialisiert

Application_Start - ausgelöst, wenn die Anwendung zum ersten Mal

Application_End beginnt - das letzte Ereignis ausgelöst, wenn die Anwendung beendet oder das Zeitlimit

Session_Start - feuerten das erste Mal eine Sitzung des Benutzers Start ed

Application_BeginRequest - mit jeder neuen Anfrage

Application_EndRequest gefeuert - ausgelöst, wenn die Anwendung

Application_AuthenticateRequest endet - das Ereignis zeigt an, dass eine Anforderung bereit ist, authentifiziert zu werden.

Application_Error - ausgelöst, wenn ein nicht behandelter Fehler auftritt, innerhalb der Anwendung

Session_End - gefeuert, wenn ein einzelner Benutzer Session oder eine Zeitüberschreitung beendet.

0

Ich konnte das gleiche Problem mit einer ausgehenden Regel in IIS lösen. Daher müssen Sie eine ausgehende Regel in IIS im URL-Rewrite-Modul erstellen, um den Positionskopf zu ändern. Sie müssen den 302-Status-Header als Bedingung prüfen und die Übereinstimmungs-URL und Aktions-URL für den Standort-Header angeben. Im Folgenden finden Sie die Schritte aus dem Artikel.

Ändern von Location-Header mit IIS URL Rewrite

  1. auf die für Ihre Website URL Rewrite-Funktion gehen und klicken Sie auf Regel (e) ...
  2. Wählen Sie aus der Voraussetzung Drop-down.
  3. Klicken Sie im angezeigten Dialogfeld auf Hinzufügen.
  4. Geben Sie {RESPONSE_STATUS} im Eingabefeld Bedingung und 3 [0-9] [0-9] in das Musterfeld ein.
  5. Klicken Sie auf OK.
  6. Wählen Sie Servervariable aus der Dropdown-Liste Zuordnungsbereich aus.
  7. Geben Sie RESPONSE_Location als Variablennamen ein.
  8. Geben Sie im Feld Muster eine Regex ein, die den URLs entspricht, die Ihr Back-End-System erzeugt (z. B. http://local/page)
  9. Geben Sie im Feld Aktionswert die richtige URL ein (z.http://example.com/page)
  10. Klicken Sie auf Übernehmen und fertig!

Referenz: Handling 301 and 302 redirects with IIS 7 URL Rewrite