Maison > php教程 > PHP开发 > le corps du texte

Méthode d'implémentation PHP de l'authentification unique SSO (framework Laravel)

高洛峰
Libérer: 2016-12-28 16:12:17
original
2257 Les gens l'ont consulté

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;
}
Copier après la connexion

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);
Copier après la connexion


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

Plus de méthodes d'implémentation PHP de l'authentification unique SSO (Laravel Framework) Veuillez prêter attention à. Site Web PHP chinois pour les articles connexes

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal