27 Stimmen

Cookie-basiertes SSO

Wie kann ich ein Cookie-basiertes Single Sign-On ohne einen SSO-Server implementieren? Ich möchte den eingeloggten Benutzer über mehrere Anwendungen hinweg nur mithilfe eines Cookies im Browser teilen.

In meinen Augen funktioniert das so:

  • Benutzer loggt sich in eine Anwendung ein
  • Die Anwendung überprüft die Anmeldeinformationen und legt dann ein Cookie im Browser an, das den Benutzernamen speichert (der mit einem privaten Schlüssel codiert sein könnte)
  • Wenn der Benutzer eine andere Anwendung öffnet, sucht diese das Cookie und liest den Benutzernamen im Wert (unter Verwendung des Schlüssels zum Entschlüsseln der Zeichenfolge)

In dieser Lösung könnte ein Benutzer das Browser-Cookie eines anderen Benutzers einsehen und die codierte Zeichenfolge des Benutzernamens entnehmen. Dann könnte er sie seinem eigenen Cookie hinzufügen (nicht gut!).

Gibt es einen sicheren Weg, dies zu tun? Mit einer zeitgesteuerten Kontrolle oder etwas Ähnlichem?

Vielen Dank im Voraus.

Tschüss

P.S. Ich weiß, dass mein Englisch nicht sehr gut ist... Entschuldigung dafür!

0voto

Josh Pearce Punkte 3307

Hier ist eine Lösung (die hoffentlich von Sicherheits-Gurus hier intensiv geprüft wird):

Jede Domain sollte Benutzerdaten in einem ähnlichen Cookie speichern, und wenn ein Benutzer ohne sich auf der neuen Domain zu authentifizieren von einer Domain zur anderen wechseln möchte, sollte ein "Sprunglink" mit einem verschlüsselten Token im Abfragestring bereitgestellt werden. Die neue Domain würde das Cookie entschlüsseln, herausfinden, wer der Benutzer ist, und ihm dann ein neues Cookie für diese Domain ausstellen. Man sollte das "Sprunglink" ein sehr kurzes Ablaufdatum haben lassen, daher würde ich sie nicht direkt auf der Seite generieren, sondern Links zu einem "Sprunglink"-Generator und -Umleiter generieren.

Dies ist vielleicht nicht unbedingt erforderlich, aber die empfangende Seite des "Sprunglinks" könnte einen Webservice-Aufruf zurück zur ursprünglichen Domain machen, um die Echtheit des verschlüsselten Tokens und dessen Ablauf zu überprüfen.

Ich denke, diese Lösung wäre anfällig für Man-in-the-Middle-Angriffe (ich bin mir nicht sicher, ob sie mehr als andere derzeit beliebte Authentifizierungsmechanismen wären), aber man könnte eine Client-MAC-Adresse und IP-Adresse in das verschlüsselte Token für zusätzliche Sicherheit einbeziehen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X