Laravel ist ein einfaches und elegantes PHP-Webentwicklungs-Framework (PHP Web Framework). Es kann Sie von unordentlichen Codes wie Nudeln befreien; es kann Ihnen helfen, eine perfekte Netzwerk-APP zu erstellen, und jede Codezeile kann prägnant und ausdrucksstark sein.
Lassen Sie mich kurz meine Logik erklären. Ich weiß nicht, ob ich SSO richtig verstehe.
Angenommen, es gibt drei Websites: a.baidu.com b.baidu.com c.baidu.com
a.baidu.com meldet sich bei dem Konto als an verifizierter Benutzer.
b und c fungieren als Clients (Subsysteme).
b und c springen zu a, wenn sie sich anmelden müssen, und tragen den Parameter source, um den Link anzugeben, zu dem nach der Anmeldung gesprungen werden soll.
Eine Site ist eine normale Anmeldemethode (Überprüfung des Benutzerkennworts), und nach erfolgreicher Überprüfung werden einige Verarbeitungsvorgänge durchgeführt. Ein Ticket muss erstellt werden. Es spielt keine Rolle, wie Sie es erstellen, solange es sicher ist. Dann speichern Sie es im Cache. Wenn Sie hier Fragen haben, fasse ich diese später zusammen. Springen Sie nach erfolgreicher Anmeldung einfach zu (url.
``` php private function getTicketUrl(\)source) { \(ticket = md5(time()+key); Cache::put(\)ticket, $user, 120); $url = $source . '?ticket=' . $ticket; return $url; }
Angenommen, Station A springt mit einem Ticket (b.baidu.com?ticket=xxxxxxxxxxxxxxx```) zu Station B.
Site b erstellt einen globalen Filter, akzeptiert das Ticket und fordert dann Station a auf, zu überprüfen, ob das Ticket von a generiert wurde.
Site b filtert den AppHttpMiddlewareCasAuthenticate-Code. Hier wird festgestellt, ob dies der Fall ist Ein Ticket wird zur Überprüfung an Station a gesendet, die Benutzer-UID wird abgerufen und die Logik wird vervollständigt, aber es gibt ein paar Fragen.
1 ist richtig. Ich habe es nach dem Prinzip geschriebenpublic function handle($request, Closure $next) { $ticket = $request->input('ticket'); if ($ticket) { $result = json_decode('http://a.baidu.com' . '/auth/check-ticket?ticket=' . $ticket), true); if ($result['state'] == "SUCCESS") { $request->session()->flush(); Auth::loginUsingId($result['result']['uid']); return redirect(redirect()->getUrlGenerator()->current()); } } return $next($request);
2. Wenn Station B jetzt häufiger aktiv ist und die Sitzung immer dort ist, während die Cache-Zeit Von Site A ist höchstwahrscheinlich abgelaufen. Zu diesem Zeitpunkt springt Site B zu Site C, und Site C springt zu Site A, um die Anmeldung zu ermitteln. Es stellt sich heraus, dass sie abgelaufen ist Dies ist ein Problem. Da unser Geschäftsmodul nicht relevant ist, werden wir dieses Problem vorerst nicht berücksichtigen.
Dieser Editor wird Ihnen das vorstellen PHP-Implementierungsmethode für SSO-Single-Sign-On (Laravel-Framework).