2010-11-25 6 views
3

Hintergrund:IIS6 & IIS7 bildet Auth Kompatibilität

Ich habe zwei Web-Anwendungen, auf verschiedenen Web-Servern einrichten, die beide IIS6 zur Zeit sind. Anwendung 1 (A1 - a1.domain.com) verwendet den von Anwendung 2 (A2 - a2.domain.com) festgelegten Authentifizierungs - Cookie für Formulare.

In A1 web.config Ich habe:

<authentication mode="Forms"> 
<forms name=".ASPXAUTH" domain="domain.com" protection="All" path="/" loginUrl="http://a2.domain.com/login.aspx" timeout="60" /> 
</authentication> 

In A2 web.config Ich habe:

<authentication mode="Forms"> 
<forms name=".ASPXAUTH" domain="domain.com" protection="All" path="/" loginUrl="login.aspx" timeout="60" /> 
</authentication> 

Diese beiden Anwendungen auch machineKey Werte in web.config

teilen Das funktioniert einwandfrei ohne Probleme.

Problem:

I A1 ist ein Upgrade in IIS7 .NET 4.0 und läuft zu verwenden, und jetzt die gemeinsame Formularauthentifizierung funktioniert nicht. Ich bin immer noch auf die richtige Login-Seite auf A2 umgeleitet und ich kann sehen, dass es die Authentifizierungs-Cookie setzt, aber wenn ich zurück zu A1 die Authentifizierung mit dem folgenden Fehler (von der Ereignisanzeige):

Formularauthentifizierung fehlgeschlagen für die Anfrage. Grund: Das angegebene Ticket war ungültig.

ich versucht habe:

  • aktualisierte Version von A1 in IIS6 einrichten (dies funktioniert - so keine Kompatibilitätsprobleme zwischen den Formen Auth in verschiedenen .NET-Versionen in IIS6)

  • einrichten mit einer lokalen Login-Seite, dh kopiert Login-Seite von A2 in A1 A1 in IIS7 aufgerüstet und A1 loginUrl = "login.aspx" gesetzt (auch funktioniert)

Dies lässt mich vermuten, dass es Kompatibilitätsprobleme gibt, die dadurch verursacht werden, dass das Authentifizierungs-Cookie unter einer IIS6-Site erstellt wird, die zur Authentifizierung von Benutzern unter einer IIS7-Site verwendet wird.

Weiß jemand, wie man das löst?

Antwort

2

In .NET 4.0 hat sich die Art und Weise, wie Authentifizierungstickets verschlüsselt werden, geändert. Wenn Sie mit älteren Versionen kompatibel sein wollen, könnten Sie das ticketCompatibilityMode Attribut wie folgt festgelegt:

<forms 
    loginUrl="/Login.aspx" 
    timeout="2880" 
    ticketCompatibilityMode="Framework20" 
    domain="domain.com" 
/> 
+0

Danke, aber leider hat das nicht funktioniert. Ich glaube nicht, dass ich Kompatibilitätsprobleme zwischen 2.0 und 4.0 sehe, da ich A1 in IIS6 auf dem gleichen Server wie A2 eingerichtet habe (aber mit verschiedenen Versionen von .NET) und festgestellt habe, dass dies funktioniert. Das einzige Mal, wenn es nicht funktioniert, ist es, wenn es auf zwei Servern läuft, eins mit IIS6 und eins mit IIS7, unabhängig von .NET-Versionen. – Chris

+2

Das Authentifizierungscookie wird nicht von IIS, sondern von ASP.NET erstellt. Der Grund, warum dies möglicherweise nicht funktioniert, ist entweder, weil Sie nicht die gleichen Maschinenschlüssel haben, der 'ticketCompatibilityMode' in .NET 4.0 und schließlich der neueste Patch, den Microsoft zur Oracle Padding-Schwachstelle in ASP.NET veröffentlicht hat: wenn Sie es haben installiert nur auf einem Server und nicht auf der anderen Seite könnte es Probleme bereiten. –

+1

Das Installieren des Sicherheitspatches auf meinem lokalen Rechner scheint den Zweck erfüllt zu haben. Lesen von Informationen über den ticketCompatibilityMode Es scheint, dass dies einen Unterschied machen wird, wenn es um die Ablaufzeit des Cookies geht, also werde ich das auch dort behalten. Danke, Dasin! – Chris