Kürzlich habe ich den Anmeldeprozess von Sina CAS untersucht und festgestellt, dass Sinas SSO tatsächlich Yale-CAS implementiert und ein paar neue Dinge hinzufügt. Der grundlegende Interaktionsprozess des Authentifizierungsprozesses bleibt unverändert. Seine Originalität liegt in der Implementierung des Ajax-Single-Sign-Ins, was ziemlich beeindruckend ist. Das Implementierungsprinzip ist die Rückruffunktion iframe + JavaScript.
1. Junior SSO
Basic SSO besteht darin, eine einheitliche Anmeldung unter demselben Top-Level-Domainnamen zu realisieren, indem das Cookie des Top-Level-Domainnamens platziert wird. Zum Beispiel:
Single-Sign-On-Adresse: sso.xxx.com/login.jsp
Anwendung 1: web1.xxx.com/login.jsp
Anwendung 2 : web2 .xxx.com/login.jsp
Anwendung 3: web3.xxx.com/login.jsp
Anmeldevorgang:
Situation 1: (Der Benutzer hat nie angemeldet)
1, Benutzer greift auf web1.xxx.com/login.jsp zu, web1 leitet zu sso.xxx.com/login.jsp weiter
2, Überprüfung der Benutzereingabe, erfolgreich. sso.xxx.com implantiert die Token-ID des .xxx.com-Domänencookies und leitet zu web1.xxx.com/login.jsp weiter. web1.xxx.com greift auf die Token-ID des .xxx.com-Domänencookies zu, um festzustellen, ob dies der Fall ist angemeldet, und das System meldet sich bei Fertig stellen an.
Situation 2: (Der Benutzer hat sich bereits angemeldet) Melden Sie sich direkt an.
Zweitens realisiert Sina SSO
Sina realisiert eine einheitliche Anmeldung über Domänennamen hinweg, die im Wesentlichen auf Cookies basiert. Wenn der Benutzer Cookies deaktiviert, kann er sich trotzdem nicht anmelden. Beispiel: Der Sina-SSO-Server ist login.sina.com.cn/sso/login.php
und die Weibo-Anmeldeadresse ist weibo.com/login.php. Die Anmeldung über Domänennamen der ersten Ebene hinweg wird durch Rückruffunktionen und Iframes erreicht.
Der spezifische Ablauf des Authentifizierungsprozesses: Hier stellen wir nur Benutzer vor, die sich noch nie angemeldet haben.
1, Der Benutzer gibt weibo.com/login.php ein
2, Der Benutzer gibt den Benutzernamen ein. Nachdem die Eingabe abgeschlossen ist und der Fokus des Benutzernamen-Eingabefelds verloren geht, sendet die Seitennummer über Ajax eine Anfrage an den Server login.sina.com.cn/sso/prelogin.php, und der Parameter ist user (der Benutzername). gerade eingegeben). Der Dienst gibt Serverzeit und Nonce-Authentifizierung zurück, die über die Rückruffunktion in Javascript-Variablen geschrieben werden.
3. Der Benutzer gibt das Passwort ein, klickt, um sich anzumelden, und die POST-Anfrage der Seite (beachten Sie, dass es sich um eine Ajax-Anfrage handelt, die nicht von login.php gesendet wird),
login.sina .com.cn/sso/login .php?client=ssologin.js(v1.3.12), die durch die Anforderung initiierte Seite ist eine unsichtbare Iframe-Seite in weibo.com/login.php, die Parameter sind Serverzeit und erhaltene Nonce im zweiten Schritt den Benutzernamen und das verschlüsselte Passwort. Kehren Sie zum gesetzten Cookie-TGT unter login.sina.com.cn zurück. Ändern Sie gleichzeitig die Iframe-Adresse in weibo.com/ajaxlogin.php?ticket=XXXXXX. Beachten Sie, dass das Ticket sehr wichtig ist.
4. iframe besucht weibo.com/ajaxlogin.php?ticket=XXXXXX, der Benutzer meldet sich an und gibt ein unter .weibo.com platziertes Cookie zurück, um die Anmeldeinformationen des Benutzers aufzuzeichnen.
5. Besuchen Sie weibo.com/login.php erneut über js. Da das Cookie geschrieben wurde, ist die Anmeldung erfolgreich und der Server sendet 302 und leitet zur Homepage des Benutzers weiter. Weibo.com/userid .
6, An diesem Punkt ist der Anmeldevorgang abgeschlossen.
Wichtige Punkte: Analyse des Interaktionsprozesses und des Passwortverschlüsselungsalgorithmus.