Laravel est un framework de développement Web PHP simple et élégant (PHP Web Framework). Il peut vous libérer des codes désordonnés comme les nouilles ; il peut vous aider à créer une application réseau parfaite, et chaque ligne de code peut être concise et expressive.
Laissez-moi vous expliquer brièvement ma logique. Je ne sais pas si je comprends bien le SSO.
Supposons qu'il y ait trois sites a.baidu.com b.baidu.com c.baidu.com
a.baidu.com se connecte au compte en tant que utilisateur vérifié.
b et c agissent en tant que clients (sous-systèmes).
b et c sautent vers a lorsqu'ils doivent se connecter, et portent le paramètre source pour indiquer le lien vers lequel sauter après la connexion.
Un site est une méthode de connexion normale (vérification du mot de passe de l'utilisateur), et certains traitements seront effectués une fois la vérification réussie. Un ticket doit être généré, peu importe la manière dont vous le générez, du moment qu'il est sécurisé. Ensuite, stockez-le dans le cache. Si vous avez des questions ici, je les résumerai plus tard. Une fois la connexion réussie, accédez simplement à (url.
``` php private function getTicketUrl(\)source) { \(ticket = md5(time()+key); Cache::put(\)ticket, $user, 120); $url = $source . '?ticket=' . $ticket; return $url; }
Supposons que la station a saute à la station b avec un ticket (b.baidu.com?ticket=xxxxxxxxxxxxxxxx```)
Le site b effectue un filtre global, accepte le ticket puis demande à la station a de vérifier si le ticket est généré par a
Le site b filtre le code AppHttpMiddlewareCasAuthenticate, détermine ici s'il existe. un ticket et la demande est envoyée à la station a pour vérification. S'il est connecté, l'UID de l'utilisateur est obtenu et la logique est terminée, mais il y a quelques questions
1 je ne sais pas si cette implémentation. est correct. Je l'ai écrit sur la base du principe.public 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. Si la station b passe maintenant à la station c, car le site b est actif plus fréquemment et la session est toujours là, pendant le temps de cache. du site a a probablement expiré. À ce moment-là, il passe du site b au site c, et le site c passe au site a pour déterminer la connexion, et il s'avère qu'il a expiré. c'est un problème. Puisque notre module métier n'est pas pertinent et ne sautera pas à volonté, nous n'examinerons pas cette question pour le moment. Mais c'est effectivement un problème pour moi
Cet éditeur va vous le présenter. à la méthode d'implémentation PHP de l'authentification unique SSO (framework Laravel). J'espère que cela vous sera utile