Ich habe ein interessantes Problem, bei dem ich völlig ratlos bin.
Ich habe einen Produktionscode entwickelt, der ein IBM LTPA-Token-Cookie liest, das von einem von einer anderen Abteilung verwalteten Rechner gesetzt wurde, es validiert und zur Anmeldung bei einem von meiner Gruppe verwalteten System verwendet (indem einige spezielle Cookies gesetzt werden). Dieser Single-Sign-On-Prozess ist für den Endbenutzer völlig transparent und funktioniert in der Produktion seit mehreren Jahren in allen Browsern problemlos.
Vor kurzem habe ich festgestellt, dass es auf meinem Entwicklungsrechner mit IE8 nicht richtig funktioniert. Ich habe vor kurzem ein Upgrade von Vista auf Windows 7 durchgeführt. Ich bin mir nicht sicher, ob es auf meinem Rechner vor oder nach dem Upgrade nicht funktioniert hat, da es etwas ist, das schon so lange funktioniert und ich keinen Grund habe, es regelmäßig zu testen. FireFox 3.5 und Chrome 4 dev auf demselben Rechner funktionieren beide wie erwartet. IE6 auf einem virtuellen XP SP3 auf diesem Rechner funktioniert einwandfrei. IE8 auf mehreren Rechnern zu Hause funktioniert einwandfrei (sowohl Windows Server 2008 als auch Windows 7).
Zu Diagnosezwecken habe ich alle Cache-Daten aus meinem IE8 Dev (WinInet-Cache) gelöscht, um mit einer sauberen Weste zu beginnen. Ich startete Fiddler, um den Prozess zu verfolgen und festzustellen, was nicht funktionierte. Was ich gefunden habe, war ziemlich interessant und ich kann es nicht erklären.
Nach der Anmeldung bei der ursprünglichen Website - nennen wir sie ltpa.domain.com - werden die Sitzungscookies wie erwartet mit dem Set-Cookie-Header vom Server übertragen. Ich überprüfe, ob die Domäne korrekt auf .domain.com eingestellt ist und ob der Pfad / lautet. Bei allen nachfolgenden Anfragen des Browsers nach der Anmeldung werden alle Cookies bei jeder Anfrage erwartungsgemäß wieder auf den Server übertragen. Tatsächlich handelt es sich um ein Portal und es gibt einige zusätzliche Inhalte von, sagen wir, portal.domain.com, die ebenfalls abgerufen werden; alle Cookies werden auch an diesen Server korrekt weitergeleitet.
Nun zum interessanten Teil: Wenn ich eine Anfrage an myserver.domain.com stelle, werden die von ltpa.domain.com gesetzten Cookies auf Domänenebene nicht an myserver.domain.com weitergeleitet, obwohl sie das sollten. Der Single-Sign-On-Prozess leitet automatisch zu ltpa.domain.com zurück, wenn die Cookies fehlen (und schickt ein Cookie an den Client, das der ltpa-Anmeldeprozess zur Weiterleitung verwendet) - das von myserver gesetzte Cookie auf Domänenebene wird nicht zu ltpa.domain.com zurückgeschickt.
Auch hier gilt sólo passiert auf dieser einen Instanz von IE8 auf meinem Entwicklungsrechner, die mir bekannt ist. Dieser Prozess wird tausende Male am Tag mit einer ziemlich großen Benutzerbasis verwendet, und wir haben keine anderen Beschwerden von Endbenutzern erhalten - also kein Hinweis darauf, dass es sich um ein systemisches Problem mit dem IE8 oder etwas Ähnliches handelt.
Ich habe den Eindruck, dass myserver.domain.com und ltpa.domain.com als getrennte Domänen behandelt werden, obwohl sie es nicht sind.
Es gibt zwei interessante Punkte, die erwähnenswert sein könnten - aber es könnte sich um Ablenkungsmanöver handeln, da dies schon immer so war und nie ein Problem verursacht hat.
-
Die DNS ist hier ein bisschen komisch. LTPA.domain.com wird zur externen IP aufgelöst. myserver.domain.com wird jedoch auf die interne IP aufgelöst. Ein Reverse-Lookup für diese IP ergibt den internen DNS-Namen - sagen wir myserver.internal.domain.com. Ich vermutete, dass der IE8 vielleicht eine Art Reverse-Lookup durchführt, um DNS-basierte Angriffe zu verhindern - also änderte ich meine HOSTS-Datei und zeigte myserver.domain.com zu Testzwecken auf die externe IP. Ich überprüfte in Fiddler, dass die Anfragen an die externe IP-Adresse gingen - aber es machte keinen Unterschied bei den Cookies. Sie wurden immer noch nicht weitergeleitet.
-
Zuvor war myserver.domain.com in den WinInet-Sicherheitskonfigurationsseiten des IE unter "Vertrauenswürdige Sites" aufgeführt. Ich habe sie und die eine andere Site, die sich dort befand, entfernt. Nennen wir diesen Rechner my2.domain.com; dieser Rechner erhält zufällig (oder vielleicht auch nicht?) auch keine Domänen-Cookies, die von ltpa.domain.com gesetzt wurden. In diesem Fall brauche ich die Cookies nicht, aber ich habe es trotzdem getestet, um zu sehen, ob dieses Problem auch auf anderen Rechnern auftritt. In der Statusleiste des Internet Explorers werden ltpa.domain.com, portal.domain.com und myserver.domain.com alle unter der Zone "Internet" angezeigt. Seltsam ist, dass my2.domain.com in der Statusleiste immer noch als "vertrauenswürdige Sites" angezeigt wird, obwohl sie nicht im Dialogfeld "Vertrauenswürdige Sites" aufgeführt ist. Ja, ich habe einen Neustart durchgeführt, nachdem ich die Änderungen vorgenommen habe.
Weitere wichtige Punkte.
-
Ich bin mir der anderen Probleme mit IE und Nicht-.com-Domains, zitierten Cookie-Werten und anderen Cookie-Anomalien bewusst, die hier auf Stackoverflow und anderswo im Internet erwähnt wurden. Keines davon trifft zu. Ich habe Eric Laws IEInternals-Artikel über Cookie-Interna durchgelesen -- http://blogs.msdn.com/ieinternals/archive/2009/08/20/WinINET-IE-Cookie-Internals-FAQ.aspx
-
Im IE sind keine funky Addons aktiviert. Nur Flash, Silverlight, Live ID sign-in helper und Fiddler2.
-
Es gibt keine InPrivate-Regeln zum Herausfiltern von Inhalten, die für meine Domäne spezifisch sind.
-
Da ich einen Laptop verwende, habe ich den IE8 von meinem Heimnetzwerk aus ausprobiert (nach einem Neustart), um DNS-Probleme auszuschließen. Ich erlebe das gleiche Verhalten zu Hause, also ist das DNS-Problem nicht das Problem, soweit ich das beurteilen kann.
-
Ich habe alle IE-Einstellungen mehrfach durchforstet, weil ich dachte, ich hätte vielleicht eine obskure Cookie-Einstellung übersehen. Die Datenschutzeinstellungen sind auf "Mittel" eingestellt, und es gibt keine Websites mit besonderer Behandlung.
-
Bei den Entwicklungswerkzeugen habe ich sichergestellt, dass die Option "Always Refresh From Server" nicht aktiviert ist.
-
Ich glaube nicht, dass ich dies Microsoft melden kann, da ich das Problem nirgendwo anders reproduzieren kann.
An diesem Punkt bin ich also ratlos. Außer der Aktivierung einer Art von Diagnosemodus in IE8, die ich nicht kenne, oder den Code für es zu debuggen... Mir sind die guten Ideen ausgegangen.
Ich denke, dass ich entweder auf einen Fehler gestoßen bin, dass irgendeine Einstellung in der Registrierung oder ähnliches verändert wurde oder dass irgendwo etwas beschädigt wurde.
Irgendwelche Ideen?