Im Internet gibt es viele Informationen zur Verwendung von JWT ( Json Web Token
) zur Authentifizierung. Ich fand jedoch immer noch keine klare Erklärung für den Ablauf, wenn JWT-Token für eine Single Sign-On-Lösung in einer Umgebung mit mehreren Domänen verwendet werden .
Ich arbeite für eine Firma, die viele Websites auf verschiedenen Hosts hat. Verwenden wir example1.com und example2.com . Wir benötigen eine Single Sign-On-Lösung. Wenn sich ein Benutzer auf example1.com authentifiziert , soll er automatisch auch auf example2.com authentifiziert werden.
Mit Hilfe der OpenId Connect Flow, ich verstehe , dass der Benutzer, der authentifizieren will example1.com wird zunächst auf die umgeleitet werden Server - Authentifizierung (oder OP
: „OpenID - Provider“). Der Benutzer authentifiziert sich auf diesem Server und leitet ihn dann mit einem signierten JWT-Token zurück zur ursprünglichen Website example1.com . (Ich verstehe, dass es einen anderen Fluss gibt, der ein Zwischen-Token zurückgibt , das später selbst gegen das echte JWT-Token ausgetauscht werden kann, aber ich denke nicht, dass dies für uns erforderlich ist.) ...
Jetzt ist der Benutzer wieder auf example1.com und wird authentifiziert! Er kann Anfragen stellen und das JWT-Token in einem Authentication
Header übergeben. Der Server kann das signierte JWT überprüfen und somit den Benutzer identifizieren. Nett!
Erste Frage :
Wie soll das JWT-Token auf dem Client gespeichert werden? Es gibt wieder viele Informationen darüber, und die Leute scheinen zuzustimmen, dass die Verwendung Web Storage
eher der richtige Weg ist als ein gutes altes cookies
. Wir möchten, dass die JWT zwischen den Neustarts des Browsers dauerhaft bleibt. Verwenden wir also Local Storage
nicht Session Storage
...
Jetzt kann der Benutzer seinen Browser neu starten und wird weiterhin auf example1.com authentifiziert , solange das JWT-Token nicht abgelaufen ist!
Wenn example1.com eine Ajax-Anfrage an eine andere unserer Domains stellen muss , würde dies meines Erachtens die Konfiguration von CORS ermöglichen. Unser Hauptanwendungsfall sind jedoch keine domänenübergreifenden Anfragen, sondern eine Single Sign-On-Lösung !
Daher die Hauptfrage:
Wie sollte nun der Ablauf aussehen , wenn der Benutzer zu example2.com geht und wir möchten, dass er mit dem bereits vorhandenen JWT-Token authentifiziert wird? Local Storage
scheint keinen domänenübergreifenden Zugriff zuzulassen, daher kann der Browser das JWT-Token derzeit nicht lesen, um Anforderungen an example2.com zu stellen !
Sollte :
- Der Benutzer wird erneut zum Authentifizierungsserver umgeleitet ? Wenn sich der Benutzer für example1.com authentifiziert hat , hat der Authentifizierungsserver möglicherweise ein Cookie für den Benutzer festgelegt, sodass diese neue Authentifizierungsanforderung für example2.com dieses Cookie verwenden kann, um festzustellen , ob der Benutzer bereits authentifiziert ist, und ihn sofort zurück zu example2.com umzuleiten mit dem gleichen JWT-Token?
- Oder kann der Browser auf example2.com auf das JWT-Token zugreifen , ohne erneut zum Authentifizierungsserver wechseln zu müssen ? Ich sehe, dass es speicherübergreifende Lösungen gibt , aber sind diese weit verbreitet? Sind sie die vorgeschlagene Lösung für eine domänenübergreifende SSO-Umgebung?
Wir wollen nichts Besonderes, wir würden uns über die meist verwendete Lösung freuen!