Frage

Ich sehe iframe / p3p Trick die beliebteste ist um, aber ich persönlich mag es nicht, weil Javascript + versteckte Felder + Frame es wirklich wie ein Hack Job suchen. Ich habe auch über ein Master-Slave-Konzept mit Web-Dienst zu kommunizieren ( http: // www. 15seconds.com/issue/971108.htm ) und es scheint besser, weil es für den Benutzer transparent und es ist robust gegenüber verschiedenen Browsern.

Gibt es eine bessere Ansätze, und was sind die Vor- und Nachteile der einzelnen?

War es hilfreich?

Lösung

Mein Ansatz bezeichnet eine Domäne als ‚zentrale‘ Domain und alle andere als ‚Satelliten‘ Domänen.

Wenn jemand ein ‚Zeichen in‘ Link klickt (oder stellt einen persistenten Login-Cookie), das Zeichen in Form sendet schließlich seine Daten an eine URL, die auf der zentralen Domäne ist, zusammen mit einem versteckten Formularelement Spruch, die Domäne kam es von (nur für die Bequemlichkeit, so wird der Benutzer danach zurück umgeleitet).

Diese Seite an der zentralen Domäne geht dann einen Sitzungs-Cookie zu (wenn die Login gut gegangen) und umleiten zurück der Benutzer unabhängig von Domain angemeldet aus, mit einem speziell generierten Token in der URL, die für diese Sitzung eindeutig ist.

Die Seite an der Satelliten-URL überprüft dann das Token, um zu sehen, ob es zu einem Token entspricht jedoch die für eine Sitzung erzeugt wurde, und wenn ja, leitet es an sich selbst ohne den Token und setzt einen lokalen Cookie. Nun, da Satelliten Domain hat auch einen Session-Cookie. Diese Umleitung löscht die Token aus der URL, so dass es unwahrscheinlich ist, dass der Benutzer oder jeder Crawler die URL enthält, das Token gespeichert werden (obwohl, wenn sie es tun, sollte es keine Rolle, kann das Token eine Einweg- Token sein).

Nun hat der Benutzer einen Session-Cookie sowohl auf die zentralen Domäne und die Satelliten-Domäne. Aber was, wenn sie besuchen einen anderen Satelliten? Nun, normalerweise, sie auf die Satelliten als nicht authentifiziert erscheinen würden.

Doch während meine Anwendung, wenn ein Benutzer eine gültige Session ist, werden alle Links zu Seiten, auf den anderen Satelliten-Domains ein? S oder & s ihnen angehängt. Ich behalte diesen ‚s‘ Query-String bedeutet „mit dem zentralen Server überprüfen, weil wir dieser Benutzer damit rechnen, eine Sitzung hat“. Das heißt, kein Token oder Session-ID wird auf jeder HTML-Seite dargestellt, nur die Buchstaben ‚s‘, die nicht jemanden identifizieren kann.

Eine URL, eine solche ‚s‘ query-Tag empfangen wird, wenn es noch keine gültige Sitzung, zu der zentralen Domäne, eine Umleitung tun sagen: „Können Sie mir sagen, wer das ist?“ durch etwas in dem Query-String setzen.

Wenn der Benutzer auf dem zentralen Server ankommt, wenn sie dort der zentrale Server authentifiziert werden einfach ihre Session-Cookie erhalten. Es wird dann den Benutzer auf die Satelliten mit einem anderen Einmalgebrauch Token zurückzuschicken, die der Satellit nur als Satellit in würde nach der Anmeldung behandeln (siehe oben). Dh, wird der Satellit nun einen Session-Cookie auf der Domäne, und leiten sich einrichten, um das Token aus dem Abfrage-String zu entfernen.

Meine Lösung funktioniert ohne Skript oder iframe-Unterstützung. Es erfordert ‚? S‘ auf all Cross-Domain-URLs hinzugefügt werden, wo der Benutzer möglicherweise noch nicht zu dieser URL ein Cookie hat. Ich dachte an einem Weg, um dies zu bekommen: wenn der Benutzer zum ersten Mal anmeldet, eine Kette von Umleitungen um jede einzelne Domain eingerichtet, an jedem einen Session-Cookie zu setzen. Der einzige Grund, warum ich dies nicht umgesetzt haben, ist, dass es kompliziert sein, würde, dass Sie einen Satz haben, um müssten in der Lage sein, dass diese Umleitungen in passieren würde, und wann man aufhören muss, und Sie würden verhindern, dass mehr als 15 Domains erweitern oder so (zu viele mehr und werden Sie gefährlich nahe an die ‚Grenze umleiten‘ von vielen Browsern und Proxies).

Andere Tipps

Das ist eine gute Lösung, wenn Sie Voll Kontrolle aller Domains Backend haben. In meiner Situation habe ich nur Client (Javascript / html) Kontrolle auf der einen, und Vollkontrolle auf einem anderen, also muss ich den Iframe / p3p Methode verwenden, die saugt. (

Das Beispiel in diesem Artikel scheint mir verdächtig, weil Sie im Grunde zu einer URL umleiten, die wiederum in einem Abfragezeichenfolgeflag auf Ihre Domäne übergibt Variablen zurück.

Im Beispiel das würde bedeuten, dass ein böswilliger Benutzer einfach navigieren könnte http: //slave.com/return.asp?Return=blah&UID=123 “und 123 als Benutzer auf slave.com angemeldet sein.

Bin ich etwas fehlt, oder ist es bekannt, dass diese Technik unsicher ist und nicht verwendet werden sollte, na ja, Dinge wie das Beispiel schlägt vor (um Benutzer-IDs vorbei, vermutlich eine Identität tragbar zu machen).

@thomasrutter

Sie könnten vermeiden alle ausgehenden Links auf Satelliten zu verwalten, die (über „s“ zu Abfragezeichenfolgeflag Anhänge) durch einen Ajax-Aufruf macht die ‚zentrale‘ Domäne für Auth-Status beim Laden der Seite zu überprüfen. Sie könnten redundante Anrufe vermeiden (auf nachfolgende Seite geladen wird), indem nur eine pro Sitzung zu machen.

Es wäre wohl besser, die Auth Prüfanforderung serverseitige vor Laden der Seite zu machen, so dass (a) Sie effizienten Zugang zu Sitzung haben, und (b) wissen Sie auf Seite machen, ob der Benutzer angemeldet (und Anzeigeinhalt entsprechend).

Wir verwenden Cookies Verkettungs, aber es ist keine gute Lösung, da sie bricht, wenn eine der Domänen für den Benutzer nicht funktioniert (durch Filterung / Firewalls etc.). Die neueren Techniken (einschließlich Ihrer) nur brechen, wenn der „Master“ Server, der die Cookies austeilt / Anmeldungen Brüche verwaltet.

Beachten Sie, dass Ihre return.asp auf jeder Website umleiten missbraucht werden kann (siehe diese zum Beispiel).

Ok scheine ich eine Lösung gefunden zu haben, können Sie ein Skript-Tag erstellen, die die src der Domäne lädt Sie festlegen möchten / get Cookies auf ... nur Safari scheint bisher nicht in der Lage zu sein, Cookies zu setzen, aber iE6 und FF funktionieren ... immer noch, wenn Sie Cookies erhalten möchten, ist dies ein sehr guter Ansatz.

Sie sollten auch aktive Session-Informationen gegen Domänen b, c, d, ... auf diese Weise bestätigen können Sie nur anmelden, wenn der Benutzer bereits bei Domäne einer angemeldet hat.

Was Sie tun, ist auf der Domäne, die die Variablen empfangen Sie auch die Referrer-Adresse überprüfen, so dass Sie die Verbindung war von Ihrer eigenen Domain bestätigen können und nicht jemand einfach den Link in die Adressleiste eingeben. Dieser Ansatz funktioniert gut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top