1. HTTP-Stateless-Protokoll
Die Webanwendung verwendet eine Browser/Server-Architektur und http wird als Kommunikationsprotokoll verwendet. HTTP ist ein zustandsloses Protokoll, das vom Server unabhängig verarbeitet wird und nicht mit vorherigen oder nachfolgenden Anforderungen verknüpft wird. Dieser Vorgang ist in der folgenden Abbildung dargestellt. Es besteht keine Verbindung zwischen den drei Anforderungs-/Antwortpaaren 🎜>
Dies bedeutet aber auch, dass jeder Benutzer über einen Browser auf Serverressourcen zugreifen kann. Wenn Sie bestimmte Ressourcen auf dem Server schützen möchten, müssen Sie Browseranfragen einschränken Sie müssen Browseranfragen identifizieren, auf legitime Anfragen reagieren und illegale Anfragen ignorieren. Um Browseranfragen zu identifizieren, müssen Sie den Browseranfragestatus kennen. Da das http-Protokoll zustandslos ist, lassen Sie Server und Browser gemeinsam einen Zustand aufrechterhalten! Dies ist der Sitzungsmechanismus 2. Sitzungsmechanismus Wenn der Browser zum ersten Mal den Server anfordert, erstellt der Server eine Sitzung und sendet die Sitzungs-ID als Teil der Antwort an den Browser Der Browser speichert die Sitzungs-ID und übermittelt die Sitzungs-ID in der zweiten und dritten nachfolgenden Anfrage. Der Server erkennt, ob es sich um denselben Benutzer handelt, indem er die Sitzungs-ID in der folgenden Anfrage abruft Es wird das gleiche wie bei der ersten Anfrage generiert. Der Server speichert das Sitzungsobjekt im Speicher. Sie können sich zwei Möglichkeiten vorstellen:1
2 |
|
12 | HttpSession session = request.getSession(); session.getAttribute("isLogin"); |
Das Browser-Anforderungsservermodell, das den Anmeldestatus implementiert, ist in der folgenden Abbildung beschrieben
Der Anmeldestatus im Sitzungsobjekt wird jedes Mal überprüft, wenn eine geschützte Ressource angefordert wird. nur isLogin= Nur auf die wahre Sitzung kann zugegriffen werden, sodass der Anmeldemechanismus implementiert ist.
Das Websystem hat sich in der Antike längst von einem einzelnen System zu einer aus mehreren Systemen bestehenden Anwendungsgruppe entwickelt Müssen Sie sich nacheinander anmelden und dann nacheinander abmelden? Wie im Bild unten beschrieben
Das Websystem hat sich von einem einzelnen System zu einer Anwendungsgruppe bestehend aus mehreren Systemen entwickelt. Die Komplexität sollte innerhalb des Systems getragen werden, nicht Benutzer. Unabhängig davon, wie komplex das Websystem intern ist, ist es für Benutzer ein einheitliches Ganzes. Das heißt, dass Benutzer, die auf die gesamte Anwendungsgruppe des Websystems zugreifen, dasselbe sind wie der Zugriff auf ein einzelnes System. Nur eine Anmeldung/Abmeldung ist ausreichend 🎜>
Obwohl die Single-System-Login-Lösung perfekt ist, ist sie nicht mehr für Multi-System-Anwendungsgruppen geeignet. Der Kern der Single-System-Login-Lösung ist das Cookie. Das Cookie trägt die Sitzungs-ID, um den Sitzungsstatus zwischen dem Browser und dem Server aufrechtzuerhalten. Es gibt jedoch Einschränkungen für Cookies. Diese Einschränkung bezieht sich auf die Domäne des Cookies (normalerweise entsprechend dem Domänennamen der Website). Wenn der Browser eine HTTP-Anfrage sendet, überträgt er automatisch Cookies, die mit der Domäne übereinstimmen, nicht alle Cookies >Warum vereinheitlichen Sie in diesem Fall nicht die Domänennamen aller Subsysteme in der Webanwendungsgruppe unter einem Domänennamen der obersten Ebene, z. B. „*.baidu.com“ und Setzen Sie dann ihre Cookie-Domänen auf „baidu.com“, dieser Ansatz ist theoretisch möglich, und sogar viele frühe Multi-System-Anmeldungen verwendeten diese Methode zum Teilen von Cookies mit demselben Domänennamen.
Nur weil es möglich ist, heißt das jedoch nicht, dass es gut ist, und es gibt viele Einschränkungen beim Teilen von Cookies. Erstens muss der Domänenname der Anwendungsgruppe einheitlich sein; zweitens muss die von jedem System in der Anwendungsgruppe (zumindest dem Webserver) verwendete Technologie identisch sein, andernfalls muss der Schlüsselwert des Cookies (JSESSIONID für Tomcat) identisch sein ) ist anders, die Sitzung kann nicht aufrechterhalten werden und die Methode zum Teilen von Cookies kann nicht über die Grenzen hinweg implementiert werden. Sprachtechnologie-Plattform-Login, wie Java, PHP, .net-System, drittes, das Cookie selbst ist nicht sicher.
Daher benötigen wir eine neue Anmeldemethode, um die Anmeldung von Anwendungsgruppen mit mehreren Systemen zu realisieren, nämlich Single Sign-On
3. Single Sign-On
1. Im Vergleich zum Single-System-Login ist für SSO ein unabhängiges Authentifizierungszentrum erforderlich. Nur das Authentifizierungscenter kann den Benutzernamen und das Passwort akzeptieren Andere Sicherheitsinformationen. Andere Systeme bieten keine Anmeldezugänge. Es werden nur indirekte Autorisierungen durch die Zertifizierungsstelle akzeptiert. Die indirekte Autorisierung wird über Token implementiert. Das SSO-Authentifizierungscenter überprüft, ob der Benutzername und das Passwort des Benutzers in Ordnung sind, und erstellt einen Autorisierungstoken. Im nächsten Sprungprozess wird der Autorisierungstoken als Parameter an jedes Subsystem gesendet und das Subsystem erhält das Das heißt, Sie sind berechtigt, eine Teilsitzungs-Anmeldemethode zu erstellen. Dieser Prozess, der das Prinzip des Single Sign-On darstellt, wird durch die folgende Abbildung veranschaulicht:
Im Folgenden finden Sie eine kurze Beschreibung der obigen Abbildung von System 1. System 1 stellt fest, dass der Benutzer nicht angemeldet ist, springt zum SSO-Authentifizierungscenter und verwendet seine eigene Adresse als ParameterSSO-Authentifizierungscenter stellt fest, dass der Benutzer angemeldet ist nicht angemeldet, und der Benutzer wird zur Anmeldeseite weitergeleitet
Der Benutzer gibt den Benutzernamen und das Passwort ein, um den Anmeldeantrag einzureichen
Das SSO-Zertifizierungszentrum überprüft Benutzerinformationen, erstellt Benutzer und führt eine SSO-Authentifizierung durch. Die Sitzung zwischen Zentren wird als globale Sitzung bezeichnet, und gleichzeitig wird ein Autorisierungstoken erstellt.
Das SSO-Authentifizierungszentrum wird dies tun Springen Sie mit dem Token zur ursprünglichen Anforderungsadresse (System 1)
System 1 erhält das Token und geht zum SSO-Zertifizierungszentrum, um zu überprüfen, ob das Token gültig ist
Das SSO-Zertifizierungszentrum überprüft das Token, gibt es als gültig zurück und registriert das System 1
System 1 verwendet das Token, um eine Sitzung mit dem Benutzer, genannt, zu erstellen eine Teilsitzung, die die geschützte Ressource zurückgibt
Benutzer greift auf System 2 geschützte Ressourcen zu
System 2 stellt fest, dass der Benutzer nicht angemeldet ist, springt zum SSO-Authentifizierungscenter und verwendet seine eigene Adresse als Parameter
Die SSO-Authentifizierung Das Zentrum stellt fest, dass der Benutzer angemeldet ist. Springen Sie zurück zur Adresse von System 2 und hängen Sie das Token an
System 2 erhält das Token und geht zum SSO-Zertifizierungszentrum, um zu überprüfen, ob das Token vorhanden ist ist gültig
SSO-Authentifizierungscenter überprüft das Token, gibt gültig zurück, registriert System 2
System 2 verwendet das Token, um eine Teilsitzung mit zu erstellen der Benutzer und gibt geschützte Ressourcen zurück
Nachdem sich der Benutzer erfolgreich angemeldet hat, wird eine Sitzung mit dem SSO-Authentifizierungscenter und jedem Subsystem eingerichtet. Die Sitzung wird vom Benutzer mit der SSO-Authentifizierung eingerichtet Das Zentrum wird als globale Sitzung bezeichnet, und die vom Benutzer mit jedem Subsystem eingerichtete Sitzung wird als lokale Sitzung bezeichnet. Nachdem die lokale Sitzung eingerichtet wurde, erfolgt der Zugriff des Benutzers auf die geschützten Ressourcen des Subsystems nicht mehr über die SSO-Authentifizierung Die globale Sitzung und die lokale Sitzung unterliegen den folgenden Einschränkungen:
Die lokale Sitzung existiert und die globale Sitzung muss vorhanden sein
Globale Sitzung existiert, lokale Sitzung existiert nicht unbedingt
Globale Sitzung wird zerstört, lokale Sitzung muss zerstört werden
Sie können Ihr Verständnis von Einzelzeichen vertiefen -on über den Anmeldevorgang von Websites wie Blog Park, Baidu, csdn, Taobao usw. Achten Sie beim Anmeldevorgang auf die Sprung-URL und die Parameter
Natürlich , Single Sign-On erfordert auch Single Logout. Wenn Sie sich in einem Subsystem abmelden, werden die Sitzungen aller Subsysteme zerstört.
Das SSO Das Authentifizierungszentrum hat den Status der globalen Sitzung überwacht. Sobald die globale Sitzung zerstört ist, benachrichtigt der Listener alle registrierten Systeme, Abmeldevorgänge durchzuführen
Im Folgenden finden Sie eine kurze Erläuterung der obigen Abbildung
Der Benutzer initiiert eine Abmeldeanforderung an System 1
System 1 erhält das Token basierend auf der zwischen dem Benutzer und System 1 eingerichteten Sitzungs-ID und initiiert eine Abmeldeanfrage an das SSO-Authentifizierungszentrum
Das SSO-Zertifizierungszentrum überprüft, ob das Token gültig ist, zerstört die globale Sitzung und ruft alle mit diesem Token registrierten Systemadressen ab
Jedes Registrierungssystem empfängt die Abmeldeanforderung vom SSO-Authentifizierungscenter und zerstört die Teilsitzung
Das SSO-Authentifizierungscenter leitet den Benutzer zur Anmeldeseite
4. Bereitstellungsdiagramm
5. Implementierung
Dies ist nur eine kurze Einführung in den Java-basierten Implementierungsprozess. Der vollständige Quellcode wird nicht bereitgestellt Prinzipiell glaube ich, dass man es selbst umsetzen kann. sso übernimmt die Client/Server-Architektur. Schauen wir uns zunächst die Funktionen an, die von sso-client und sso-server implementiert werden sollen (unten: sso-Zertifizierungsstelle = sso-server)
Fangen Sie die nicht angemeldete Benutzeranforderung des Subsystems ab und springen Sie zum SSO-Authentifizierungszentrum
Empfangen und speichern Sie das vom SSO-Authentifizierungszentrum gesendete Token
Kommunizieren Sie mit dem SSO-Server und überprüfen Sie die Gültigkeit des Tokens
Errichten Sie eine lokale Sitzung
Abfangen des Benutzer-Abmeldeanforderung und an SSO senden. Das Zertifizierungszentrum sendet eine Abmeldeanforderung
Empfängt die Abmeldeanforderung vom SSO-Zertifizierungszentrum und zerstört die lokale Sitzung
SSO-Server
Anmeldeinformationen des Benutzers überprüfen
Globale Sitzung erstellen
Erstellen Autorisierungstoken
Mit SSO-Client kommunizieren und Token senden
Überprüfen Sie die Gültigkeit des SSO-Client-Tokens
Systemregistrierung
Erhalten Sie die SSO-Client-Abmeldeanforderung und melden Sie alle Sitzungen ab
Als Nächstes implementieren wir SSO Schritt für Schritt nach dem Prinzip!
Es gibt drei Möglichkeiten für Java, Anfragen abzufangen: Servlet, Filter und Listener. Erstellen Sie eine neue LoginFilter.java-Klasse im SSO-Client, implementieren Sie die Filterschnittstelle und fügen Sie das Abfangen nicht angemeldeter Benutzer in der doFilter()-Methode
3456789101112 public void doFilter(ServletRequest request, ServletResponse Response, FilterChain-Kette )wirft IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; | HttpServletResponse res = (HttpServletResponse) Response;
HttpSession session = req.getSession();
if(session.getAttribute("isLogin")) { chain.doFilter(request, Response) ; return; } //Zum SSO-Zertifizierungszentrum springen res.sendRedirect("sso-server-url-with-system - url"); } |
Fängt Anfragen von SSO ab Client Springen Sie zur Nicht-Anmeldeanforderung des SSO-Authentifizierungscenters und springen Sie zur Anmeldeseite. Dieser Vorgang ist genau derselbe wie bei SSO-Client
Der Benutzer befindet sich auf der Anmeldeseite. Geben Sie den Benutzernamen und das Kennwort ein, fordern Sie die Anmeldung an, das SSO-Authentifizierungscenter überprüft die Benutzerinformationen, die Überprüfung ist erfolgreich und markiert den Sitzungsstatus als „angemeldet“
45
|
}
|
Das obige ist der detaillierte Inhalt vonBeispiele zur Erläuterung des Prinzips von SSO Single Sign-On. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!