Single-Sign-On-Fluss mit JWT für die domänenübergreifende Authentifizierung

Gibt es eine Menge an Informationen auf dem Internet über die Verwendung von JWT (Json Web Token) für die Authentifizierung. Aber ich wusste immer noch nicht finden, eine klare Erklärung, was die Strömung sollte bei der Verwendung von JWT Token für ein single-sign-on-Lösung in einer mehrfach-Domänen-Umgebung.

Ich arbeite für eine Firma die hat eine Menge von Websites, die auf verschiedenen hosts. Wir verwenden example1.com und example2.com. Wir brauchen ein single-sign-on-Lösung, was bedeutet, wenn ein Benutzer authentifiziert auf example1.comwir wollen ihn auch authentifiziert werden, auf example2.comautomatisch.

Mithilfe der OpenId Connect flow, ich verstehe, dass die Benutzer zu authentifizieren, die auf example1.com wird zunächst auf die umgeleitet werden Authentifizierungs-server (oder OP : "OpenId Provider"). Der Benutzer authentifiziert sich am server, der dann leitet ihn zurück zu der ursprünglichen example1.com Website mit einer signierten JWT token. (Ich verstehe, es gibt eine andere Strömung, die gibt ein intermediate tokendass selbst ausgetauscht werden können, für die echte JWT token später auf, aber ich glaube nicht, dass dies erforderlich ist für uns)...

So, jetzt ist der user wieder auf example1.com und authentifiziert ist! Er kann Anträge stellen, vorbei an der JWT Tokens in einer Authentication header und der server ist in der Lage zu überprüfen, die unterzeichnet JWT und ist daher in der Lage, den Benutzer zu identifizieren. Schön!

Erste Frage :

Wie soll der JWT Tokens werden auf dem client gespeichert? Es ist wieder eine Menge von Informationen über diese, und die Menschen scheinen zu vereinbaren, dass mit Web Storage ist der Weg zu gehen, eher als der gute, alte cookies. Wir wollen, dass der JWT hartnäckig zwischen browser neu gestartet, so lassen Sie uns Local Storagenicht Session Storage...

Nun kann der Benutzer seinen browser neu starten, und er wird immer noch authentifiziert werden example1.comsolange die JWT token nicht abgelaufen ist!

Auch, wenn example1.com muss ein Ajax-request zu einer anderen unserer domains, ich verstehe die Konfiguration CORS erlauben würde. Aber unsere wichtigste use case ist nicht cross-domain-requests, es ist mit einem single-sign-on-Lösung!

Daher die wichtigste Frage :

Nun, was sollte die Strömung sein, wenn der Benutzer geht zu example2.com und wir wollen, dass er authentifiziert werden, mit dem JWT token, den er bereits hat? Local Storage scheint nicht, dass cross-domain-Zugriff, so dass an dieser Stelle der browser nicht Lesen können, die JWT token Anfragen stellen, um example2.com!

Sollte :

  • Der Benutzer umgeleitet werden, um die Authentifizierungs-server wieder? Wenn der authentifizierte Benutzer für example1.comdie
    Authentifizierungs-server unter Umständen ein cookie auf dem Benutzer, so dass diese neue Authentifizierung-Anforderung für example2.com verwenden könnte, die cookie zu sehen, dass der Benutzer bereits authentifiziert ist und sofort leitet ihn zurück zu
    example2.com mit der gleichen JWT token?
  • Oder können die browser, auf example2.comden Zugriff auf die JWT token, ohne zu gehen, um die Authentifizierungs-server wieder? Ich sehe, gibt es cross-storage-Lösungenaber sind diese weit verbreitet? Sind Sie die vorgeschlagene Lösung um eine cross-domain-SSO-Umgebung?

Wollen wir nicht etwas Phantasie, wir würden uns freuen, mit das meist genutzte Lösung!

InformationsquelleAutor der Frage electrotype | 2015-11-15

Schreibe einen Kommentar